nervepack

Content & Team Overlays

Auto-generated from docs/CONTENT-OVERLAY.md — always current.

The engine (~/Code/nervepack) is shared machinery. Your skills, sources, memory, and metrics live in a separate content overlay so they stay yours and sync on your own repo. Configuring one is optional but recommended — skip it and the engine falls back to its own root, which works but gives you nowhere personal to grow.

Part of the getting-started walkthrough.

Personal overlay

Tell the engine where your content lives:

mkdir -p ~/.config/nervepack
echo "$HOME/Code/nervepack-content" > ~/.config/nervepack/content-dir

The mkdir is required the first time — > creates the file but not its parent directory, so writing content-dir into a ~/.config/nervepack that doesn’t exist yet fails with no such file or directory.

No overlay yet? Fork nervepack-content-example, rename it to something private, and point at that.

Team overlay (optional)

You can point at a second, shared overlay that sits above your personal one:

echo "$HOME/Code/team-nervepack-content" > ~/.config/nervepack/team-dir

The stack becomes team > personal > engine. Reads merge with the team winning (a team skill or playbook shadows your personal one of the same name), and writes still land in your personal overlay unless you explicitly “save to the team layer.” This is dormant until a team dir resolves, and enabled by the team toggle.

For a nested organization, the value can be a comma-separated list of up to four team dirs, highest-precedence first:

echo "$HOME/Code/squad-content,$HOME/Code/division-content,$HOME/Code/org-content" \
  > ~/.config/nervepack/team-dir

That stacks squad > division > org > personal > engine (the leftmost wins a name clash). More than four team dirs is a hard error — the session falls back to personal-only, and the doctor (cli.py doctor) flags the invalid config.

Declaring your layout

nervepack does not assume your overlay uses any particular directory names. Each layer says where its own content lives in a committed manifest, <layer>/.nervepack/layout.json. The engine owns a small vocabulary of content kinds (skill, knowledge, reference, roadmap, prompt); your layer maps each kind to a path template.

NP=~/Code/nervepack/engine/nervepack_engine/cli.py
python3 $NP layout show      --layer personal   # current routes + where they came from
python3 $NP layout questions --layer personal   # what the engine could not work out

A layer with no manifest still works: the engine infers routes from what is on disk (a skills/*/SKILL.md tree, pages with frontmatter kind:, a root ROADMAP.md, an agents/ dir). Inference never guesses — where the shape is unclear it reports an open question instead. Run the np-core-layout skill to answer those and record the manifest, after which placement is deterministic.

Contribution refuses a kind your layer never routed, rather than inventing a directory. INDEX.md and inbound links are what make a page findable, so directory structure stays human convenience rather than a contract.

Verify

python3 ~/Code/nervepack/engine/setup/np-path-check.py ~/Code/nervepack ~/Code/nervepack-content

Passing your overlay as a second argument checks that its skills and docs resolve too, not just the engine’s. A clean run prints all setup/onboard path references resolve ✓.