domain-init
Initializes or refreshes the Domain Registry in CLAUDE.md by scanning the project for library directories. Run this once per project, or after adding new libraries. Creates the registry table that domain-context skill uses for auto-loading.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Domain Registry Initializer
Initialize or refresh the Domain Registry in this project's CLAUDE.md.
What This Does
- Scans the project for library/domain directories
- Reads each library's metadata (
project.json,package.json, orng-package.json) - Writes (or updates) a
## Domain Registrysection inCLAUDE.md - Adds the auto-load instruction if it's not already present
Instructions
Step 1 — Detect Project Structure
Run the detection script to find all library directories:
bash .claude/skills/domain-init/scripts/scan_domains.sh 2>/dev/null \
|| node .claude/skills/domain-init/scripts/scan_domains.js 2>/dev/null
If neither script is available, scan manually:
- Look for directories under
libs/that containproject.jsonorpackage.json - For Nx workspaces: read
project.json→nameandtargets.build.options.project - For plain npm: read
package.json→name - For Angular libraries: read
ng-package.json→ check parentpackage.jsonfor name
Step 2 — Build the Registry Table
For each found library, collect:
| Field | Source |
|---|---|
Path |
Relative directory path from workspace root |
Import Path |
importPath from project.json, or name from package.json |
Description |
First line of existing README.md (skip # heading), or generate from library name |
Generate description heuristics if no README exists:
-
widget-*→ "Widget: [name] feature module" -
*-domainordomain→ "Domain layer: business logic and state" -
*-featureorfeature→ "Feature layer: container components" -
*-uiorui→ "UI layer: presentational components" -
*-utilorutil→ "Utilities and helpers" -
shared/*→ "Shared: [name]"
Step 3 — Write to CLAUDE.md
Read the current CLAUDE.md. Then:
If <!-- domain-registry-start --> already exists: Replace everything between the start and end markers with the new table.
If it does not exist: Append the following block to CLAUDE.md:
## Domain Registry
> Auto-maintained by domain-init skill. Run `/domain-init` to regenerate.
<!-- domain-registry-start -->
| Path | Import Path | Description |
|------|-------------|-------------|
| <path> | <import-path> | <description> |
<!-- domain-registry-end -->
Step 4 — Add Auto-Load Instruction (if missing)
Check if CLAUDE.md already contains the phrase domain-init skill or Domain Registry. If it does NOT, also append:
## Domain Context Loading
The `domain-init` skill is active. Before working on any library listed in the
Domain Registry above, silently read its `README.md` for architecture context.
Step 5 — Report
After writing, output a summary:
✓ Domain Registry updated in CLAUDE.md
Found N domains:
- libs/widget-chat → @scope/widget-chat
- libs/shared/... → @scope/shared/...
...
Domains without README.md (consider running /domain-readme <path>):
- libs/dashboards-manager
- libs/widget-map
Arguments
$ARGUMENTS — optional scan root path. Defaults to libs/ if empty.
Examples:
-
/domain-init— scanslibs/ -
/domain-init libs/shared— scans onlylibs/shared/ -
/domain-init packages— scans apackages/monorepo structure
Re-running
This skill is idempotent. Running it multiple times only updates the registry table, preserving all other content in CLAUDE.md.
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!