skills/add-domain/SKILL.md
Add a new knowledge domain to your existing system. Derives domain-specific configuration through conversation, generates domain folders, templates, and vocabulary while preserving and connecting to your existing architecture.
npx skillsauth add agenticnotetaking/arscontexta add-domainInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are extending an existing knowledge system with a new domain. This is composition, not replacement. The new domain must coexist with existing domains while maintaining its own vocabulary, schema, and processing patterns. The shared graph (wiki links, hub MOC, description fields) connects everything.
Add a new knowledge domain: $ARGUMENTS
Read these during derivation phases:
Composition rules:
${CLAUDE_PLUGIN_ROOT}/reference/derivation-validation.md -- Test 4 (Multi-Domain Composition) validates the pattern${CLAUDE_PLUGIN_ROOT}/reference/three-spaces.md -- three-space architecture (shared across domains)${CLAUDE_PLUGIN_ROOT}/reference/interaction-constraints.md -- coherence validation for domain configDomain configuration:
${CLAUDE_PLUGIN_ROOT}/reference/vocabulary-transforms.md -- domain-native term mapping${CLAUDE_PLUGIN_ROOT}/reference/tradition-presets.md -- pre-validated domain configurations${CLAUDE_PLUGIN_ROOT}/reference/use-case-presets.md -- 3 presets with configurations${CLAUDE_PLUGIN_ROOT}/reference/dimension-claim-map.md -- research backing for dimension positions${CLAUDE_PLUGIN_ROOT}/reference/failure-modes.md -- domain vulnerability matrixValidation:
${CLAUDE_PLUGIN_ROOT}/reference/kernel.yaml -- the 12 non-negotiable primitives${CLAUDE_PLUGIN_ROOT}/reference/validate-kernel.sh -- kernel validation scriptAutomated. Understand what exists before adding to it.
Read ops/derivation.md for:
Read ops/config.yaml for live configuration values.
Identify all current knowledge domains:
Classify each of the 8 dimensions as system-level or domain-adjustable:
| Dimension | Type | Rationale | |-----------|------|-----------| | Organization | system-level | Flat/hierarchical applies to the whole workspace | | Automation | system-level | Hooks and skills are workspace-wide infrastructure | | Navigation depth | system-level | Hub MOC structure is shared | | Granularity | domain-adjustable | Different domains may need different granularity | | Processing | domain-adjustable | Research needs heavy, relationships need light | | Maintenance | domain-adjustable | Different condition thresholds per domain growth rate | | Schema | domain-adjustable | Domain-specific fields vary | | Linking | domain-adjustable | Some domains need semantic search, others don't |
System-level dimensions are fixed by the existing system. Domain-adjustable dimensions can vary for the new domain.
1-3 conversation turns to understand the new domain. Use AskUserQuestion for each turn.
Ask ONE focused question about the new domain:
"Tell me about [domain hint from $ARGUMENTS] -- what kinds of things will you track, and how does this relate to your existing [current domain vocabulary] work?"
The second half is critical: understanding the relationship between domains drives composition decisions.
As the user responds, extract signals for domain-adjustable dimensions:
| Signal | Dimension | Position | |--------|-----------|----------| | "Quick notes about people" | Granularity | moderate | | "Deep analysis of sessions" | Processing | heavy | | "Just remember key moments" | Processing | light | | "I revisit and update often" | Maintenance | tight thresholds | | "Mostly static once captured" | Maintenance | lax thresholds | | "Need to find patterns across entries" | Linking | explicit+implicit |
Also extract:
After the opening response, ask 1-2 follow-ups targeting:
Do NOT ask about dimensions directly. Listen for them in natural conversation.
For each adjustable dimension, determine the position for the new domain:
${CLAUDE_PLUGIN_ROOT}/reference/use-case-presets.mdRead ${CLAUDE_PLUGIN_ROOT}/reference/vocabulary-transforms.md for the transformation table.
Priority order:
Build the complete mapping for the new domain:
| Universal Term | New Domain Term | Source | |---------------|-----------------|--------| | note | [term] | [user / preset / blend] | | extract / reduce | [term] | [user / preset / blend] | | connect / reflect | [term] | [user / preset / blend] | | MOC | [term] | [user / preset / blend] | | description | [term] | [user / preset / blend] | | topics | [term] | [user / preset / blend] | | inbox | [term] | [user / preset / blend] |
Start from the base note schema (description, topics) and add domain-specific fields:
_schema:
entity_type: "[domain]-note"
applies_to: "[domain-folder]/*.md"
required:
- description
- topics
optional:
- [domain-specific fields based on conversation signals]
enums:
[field]:
- [domain-relevant values]
This is critical for multi-domain composition. Verify:
Filename uniqueness -- the new domain's note titles won't collide with existing notes. Wiki links resolve by filename across the entire workspace, so every filename must be unique.
Schema field names -- new domain fields don't conflict with existing domain fields. If both domains use a field name (e.g., type), the enum values must be mutually exclusive or the field must have compatible semantics.
Template names -- new domain templates have distinct names from existing templates.
Folder names -- new domain folders don't collide with existing folders.
If any collisions are detected, resolve them before proceeding.
Read ${CLAUDE_PLUGIN_ROOT}/reference/derivation-validation.md (Test 4: Multi-Domain Composition) for the validated composition pattern.
Verify each composition rule:
All note filenames must be unique across all domains. The new domain's naming conventions must be compatible with existing ones.
The existing hub MOC (index.md or equivalent) must be updated to include the new domain's entry point MOC. The hierarchy becomes:
hub -> existing domain MOCs
-> new domain MOC
If connection finding (reflect) is active, it must search across all domains -- a note in the new domain might connect to a note in the existing domain. Semantic search collections must include the new domain folder.
If the new domain needs different processing intensity than the existing domain, the pipeline must route by note type. Heavy processing for research notes, light processing for relationship notes, etc.
The new domain's methodology guide should load only when working in that domain, not at every session start. This prevents context bloat as domains accumulate.
Run the new domain's configuration through ${CLAUDE_PLUGIN_ROOT}/reference/interaction-constraints.md:
Show the user exactly what will be created and how it connects to what exists.
Output format:
=== ADD DOMAIN PROPOSAL ===
New domain: [domain name]
Vocabulary: [key term mappings]
--- What will be created ---
Folder structure:
[domain-folder]/ <- [description]
index.md <- domain hub MOC
[domain-inbox]/ <- capture zone (if processing >= moderate)
templates/[domain]-note.md <- note template with domain schema
--- Connections to existing system ---
- Hub MOC (index.md): add [new domain] section with link to [[domain-index]]
- Cross-domain links: [new domain] notes can link to [existing domain] notes and vice versa
- Shared infrastructure: self/, ops/, templates/ remain shared
- Semantic search: [new collection added / not needed at current volume]
--- What does NOT change ---
- Existing [domain] folder: untouched
- Existing templates: untouched
- Existing MOC hierarchy: untouched (hub gains one new link)
- self/ space: shared (methodology.md updated with multi-domain patterns)
- ops/ space: shared (derivation.md updated with domain addition)
--- Domain Configuration ---
| Dimension | Position | Rationale |
|-----------|----------|-----------|
| Granularity | [val] | [reason] |
| Processing | [val] | [reason] |
| Maintenance | [val] | [reason] |
| Schema | [val] | [reason] |
| Linking | [val] | [reason] |
| (system-level dimensions inherited from existing system) |
--- Schema Preview ---
[Show the _schema block for the new domain template]
--- Vocabulary Mapping ---
| Universal | New Domain | Existing Domain |
|-----------|-----------|-----------------|
| note | [term] | [existing term] |
| ... | ... | ... |
Would you like me to create this? I can adjust anything before generating.
=== END PROPOSAL ===
Wait for user approval before proceeding.
Create the new domain's infrastructure. Order matters -- later artifacts reference earlier ones.
Create the domain's notes folder and optional inbox folder:
mkdir -p [domain-folder]
mkdir -p [domain-inbox] # if processing >= moderate
Create templates/[domain]-note.md with the derived _schema block, required and optional fields, and domain vocabulary in comments and examples.
Create [domain-folder]/index.md:
---
description: [entry point description in domain vocabulary]
type: moc
---
# index
[Orientation paragraph in domain vocabulary]
## [domain:Topics]
(topics will emerge as notes accumulate)
## Getting Started
1. Capture your first [domain:note]
2. Connect it to this hub
Create a domain-specific methodology document that loads when working in this domain. For Claude Code: .claude/skills/[domain]-guide/SKILL.md or a section in the context file. For other platforms: a standalone guide file.
The guide covers:
Add the new domain to the existing hub MOC (index.md):
## [New Domain Name]
- [[domain-index]] -- [description of what this domain tracks]
Add to the context file:
Add multi-domain working patterns:
Document the domain addition:
If qmd or equivalent is configured:
# Add new collection for domain folder
qmd update
qmd embed
Update .mcp.json or equivalent configuration to include the new collection.
If the new domain needs its own processing skills (because processing intensity or vocabulary differs from existing domain), generate domain-adapted versions of reduce/reflect/verify skills.
If the existing skills can handle multi-domain routing by note type, update them instead of creating duplicates.
Run kernel validation against the new domain's files:
find . -name "*.md" -not -path "./.git/*" -not -name "README.md" -not -name "SKILL.md" \
-exec basename {} \; | sort | uniq -d
=== DOMAIN ADDITION VALIDATED ===
Domain: [name]
Files created: [N]
Hub updated: yes
Cross-domain links: functional
Filename uniqueness: verified
Schema conflicts: none
Your system now has [N] domains:
- [existing domain] ([N] notes)
- [new domain] (0 notes -- ready to start)
Next steps:
1. Capture your first [domain:note] in [domain-folder]/
2. Cross-domain connections will emerge naturally as you work
3. Run /health when /next flags maintenance issues in either domain
=== END VALIDATION ===
tools
Apply plugin knowledge base updates to an existing generated system. Consults the Ars Contexta research graph for methodology improvements, proposes skill upgrades with research justification. Never auto-implements. Triggers on "/upgrade", "upgrade skills", "check for improvements", "update methodology".
documentation
Interactive walkthrough for new users. Learn by doing — each step creates real content in your vault. Three tracks (researcher, manager, personal) with a universal learning arc. Triggers on "/tutorial", "walk me through", "how do I use this".
testing
Scaffold a complete knowledge system. Detects platform, conducts conversation, derives configuration, generates everything. Validates against 15 kernel primitives. Triggers on "/setup", "/setup --advanced", "set up my knowledge system", "create my vault".
testing
Re-derive your knowledge system from first principles when structural drift accumulates. Analyzes dimension incoherence, vocabulary mismatch, boundary dissolution, and template divergence. Preserves all content while restructuring architecture.