npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@openreachtech/hora

v0.7.0

Published

Hora Kit: a package that distributes AI skills, agents, and docs for AI-driven application development.

Downloads

991

Readme

Hora Kit

日本語

Hora builds an application from its spec, one feature at a time, through an AI agent tool.

This package is the container that carries its core — the skills and agents that tool reads — to the repositories that build with it.

A new project does not install it by hand. hora-boilerplate is the GitHub template to start from: it declares this package and the four skill libraries, places them on npm install, and holds the documentation for the kit as a whole — what a project built with it contains, what each command does, and how to put it on a repository that already exists. What follows here is for equipping the kit into a repository that did not come from that template.

Everything it ships lives under a single directory, kit/, laid out the way an agent tool expects to find it:

kit/
├── agents/   subagent definitions
└── skills/   skill definitions

kit/ is named after what it holds rather than after any one tool, so the same payload can be delivered to whichever agent tool a repository uses. The target documented here is Claude Code, whose configuration directory is .claude/.

What npm publishes is dist/, built from kit/ on every pack. The two trees are identical, so the layout above is also the layout of the installed package.

Alongside it the package carries one executable, and its only job is to place that payload into a repository. There is nothing here to import.

How Hora itself works — the method this kit carries — is documented under docs/: the quickest route from an empty repository to a spec, what each command does, how the orchestrator runs, putting it on a repository that already exists, the emergency route, and the writing style these documents are held to.

Installation

Requires Node.js 20.0.0 or newer, the floor engines declares. The CI builds against the current LTS.

npm install -D @openreachtech/hora

This package ships no install script of its own, so adding it as a dependency installs the package and places nothing. Declare the command as your own project's postinstall, and npm install alone equips the repository:

{
  "scripts": {
    "postinstall": "hora-core install"
  }
}

A project's own scripts are outside what npm holds back from v12 on, so this asks nothing of whoever clones the repository. npx is not needed here either: a lifecycle script runs with node_modules/.bin on its PATH.

The hook you just declared takes effect from the next npm install on, so run the command by hand for the first placement — and for a one-off, or a repository that is not yours to add a hook to:

npx --no hora-core install

--no stops npx before it downloads: the name is still resolved against the registry, but nothing is fetched, so neither the install script nor the bin of a stranger's package ever runs. Without it, a bin that is not installed becomes a fetch of whatever has been published under hora-core, an unscoped name this package does not hold.

Where the package is not a dependency at all — a one-off, or a repository that is not yours to add a hook to — name it in full instead: npx --package=@openreachtech/hora hora-core install. What is fetched is then a scoped name nobody else can publish under, which is the guarantee the unscoped bin name never carried.

Usage

The kit lands in your repository's .claude/, the directory an agent tool reads from — dist/agents/ at .claude/agents/, dist/skills/ at .claude/skills/. A package's own directory is never on that path, so this clone is what makes the kit visible. The skills are then invocable as slash commands, /hora, /hora-plan, /hora-build.

Every directory of dist/ is carried into the directory of the same name, and what that directory already holds is left in place. A skill your own repository authored sits beside the installed ones, untouched, as long as its name is not one this package distributes.

Directories, not links

.claude/, and the payload directories inside it, have to be directories of your repository rather than symbolic links. An installation verifies every step it is reached through, and finding a link at any of them it writes nothing and removes nothing. .hora/equip-core.json, the record of what was installed, is verified the same way: a link there would send the write to whatever it stands for and overwrite it.

An installation that carries nothing says why and ends with a failing exit code. Where the command runs as your project's own postinstall, that is what npm install reports; run on its own, npx --no hora-core install tells you the same.

A link is content of the repository rather than an instruction of whoever runs the command, so following one would let the repository decide where entries are written and, worse, where the entries of the previous run are removed from.

Where .claude/ as a whole points at a directory shared between repositories, name that directory instead — npx --no hora-core install --dir <the directory it resolves to> reaches the same state, and the link still makes the kit visible at .claude/. Where a single payload directory is the link, no arrangement installs into it: --dir names the directory holding the payloads, never one of them. Replace it with a directory of its own.

Keeping the installation current

The installed kit is this package's build output rather than source of your repository, so ignore it, and name your own back in:

.claude/agents/*
.claude/skills/*
!.claude/skills/my-own-skill/
.hora/

Matching on the whole directory rather than on a name prefix is deliberate: what this package distributes changes with every release, and a pattern written against today's names goes stale without saying so.

An npm install with no arguments re-runs your project's postinstall, so the kit follows along. Naming the package on the command line — npm install @openreachtech/hora@latest — does not, and neither does a repository without a hook. Run the command again yourself:

npx --no hora-core install

install is repeatable: it removes what the previous run installed — recorded in .hora/equip-core.json — along with anything named after an entry this package distributes, before copying the current kit. A renamed or dropped skill therefore leaves nothing behind, and a repository that had copied dist/ by hand is tidied up on its first run.

Commands

| Command | What it does | | :-- | :-- | | hora-core install | Install the kit, replacing what the previous run installed | | hora-core list | Print the entries the kit installs, installing nothing | | hora-core uninstall | Remove every entry this package installed, along with the manifest | | hora-core help | Print the usage text |

--dir <path> installs into a directory other than .claude.

Contribution

Bug reports, feature requests, and code contributions are welcome.

Feel free to contact us through GitHub Issues.

git clone https://github.com/openreachtech/hora-core.git
cd hora-core
npm install
npm run lint
npm test

License

This project is released under the Apache License 2.0.

For more details, please see in the LICENSE file.

Developer

Open Reach Tech Inc.

Copyright

© 2026 Open Reach Tech Inc.