Publishing a domain pack
Major domain packs can ship as scoped npm packages (@carina/pack-*) and can also be listed on the Carina Skills Hub. The current public kernel package is carina-agent; the future scoped @verlox/carina-core package will ship pack metadata only, with pack bodies as opt-in installs.
Package layout
Use packages/packs/_template/ as a starting point. A publishable pack includes:
my-pack/
package.json # name: @carina/pack-<slug>, carina.pack → pack.json
pack.json # manifest: name, version, description, skillCount
src/index.ts # exports { skills, systemSuffix }
skills.ts # PackSkillInput[]
prompts/system.ts # optional systemSuffix string
tools/ # optional domain tools
data/ # optional static domain data
README.md
For the future scoped package split, package.json will declare:
{
"name": "@verlox/pack-property",
"peerDependencies": { "@verlox/carina-core": "^0.2.0" },
"imports": { "#core/*": "@verlox/carina-core/internal/*" },
"carina": { "pack": "./pack.json", "slug": "property-uk" }
}
Pack code imports core helpers via #core/... (resolved to @verlox/carina-core/internal/* at publish time after the scoped package split).
npm publish
-
Bump semver in
pack.jsonandpackage.json. -
Build core and the pack from the monorepo root:
cd core.carinaai.ukpnpm buildpnpm --filter @verlox/pack-property build -
Publish from the pack directory:
cd packages/packs/property-uknpm publish --access public -
Register the npm name in core
PACK_NPM_PACKAGES(src/skills/pack-discovery.ts) and addnpmPackageon the manifest entry insrc/skills/pack-manifests.ts.
Hub listing
After npm publish (or for hub-only packs):
carina pack publish property-uk
This uploads a tarball to the Skills Hub registry. Users can install with:
carina pack install property-uk
npm install path
Users can install directly from npm:
npm install @verlox/pack-property
export ACTIVE_SKILL_PACKS=property-uk
carina chat
Or use the CLI flag:
carina pack install property-uk --npm
Core resolves packs in this order: ~/.carina/packs/, monorepo packages/packs/ (dev), legacy src/skills/packs/ when CARINA_DEV=1, then installed @carina/pack-* in node_modules.
Large corpora
If a pack RAG corpus exceeds npm size limits, split data into a companion package (for example @verlox/pack-property-data) and document the dependency in the pack README. Keep pack semver independent of the Carina kernel package.
v1 extracted packs
| Slug | npm package | Status |
|---|---|---|
property-uk | @verlox/pack-property | Published |
healthcare | @verlox/pack-health | Published |
borehole-africa | @verlox/pack-borehole-africa | Private WIP (ABBIS corpus) |
Remaining built-in packs still live under src/skills/packs/ until extracted in a later phase.