research-storage
Research file storage conventions and templates for dokhak agents. Use when: (1) saving research results from research-collector or researcher agents, (2) reading cached research files, (3) checking if research exists for a section. Provides directory structure, file format templates, and naming conventions.
What this skill does
# Research Storage Skill
This skill defines conventions for storing and retrieving research data collected by dokhak agents. Research files are cached to enable reuse and reduce redundant web searches.
## Quick Reference for Agents
| Agent | Uses This Skill For |
|-------|---------------------|
| researcher | Directory resolution, research.md writing, multi-tier lookup |
| research-collector | summary.md, sources.md writing to `.research/init/` |
| writer | Reading research files (read-only) |
| structure-designer | Reading init research (read-only) |
### Standard Loading Pattern
All agents should reference this skill for:
- **Normalization functions**: normalizeChapter, normalizeSection, generateSlug
- **Multi-tier directory resolution**: Handling legacy naming inconsistencies
- **File format templates**: research.md, sources.md, summary.md
```
Read("skills/research-storage/SKILL.md")
```
## Directory Structure
```
project-root/
├── .research/ # Research cache directory
│ ├── init/ # /init command research
│ │ ├── summary.md # Structured research summary
│ │ └── sources.md # Source registry with reliability
│ │
│ └── sections/ # /write command section research
│ ├── 01-1-introduction/
│ │ ├── research.md # Section research results
│ │ └── sources.md # Section sources
│ ├── 01-2-core-concepts/
│ │ ├── research.md
│ │ └── sources.md
│ └── {chapter}-{section}-{slug}/
│ ├── research.md
│ └── sources.md
```
## Naming Convention
### Section Directory Pattern (CANONICAL)
Format: `{chapter}-{section}-{slug}`
| Component | Format | Canonical Example | Non-canonical (avoid) |
| --------- | ----------------------- | ----------------- | --------------------- |
| chapter | Zero-padded 2 digits | `01`, `02`, `10` | `1`, `2` |
| section | Single digit (NO padding) | `1`, `2`, `3` | `01`, `02` |
| slug | Kebab-case lowercase | `core-concepts` | `Core-Concepts` |
**Canonical Examples**:
- Chapter 1, Section 2, "Core Concepts" → `01-2-core-concepts` ✓
- Chapter 3, Section 1, "Getting Started" → `03-1-getting-started` ✓
- Chapter 10, Section 3, "Advanced Patterns" → `10-3-advanced-patterns` ✓
**Non-canonical (may exist from legacy/inconsistency)**:
- `1-2-core-concepts` (chapter not padded)
- `01-02-core-concepts` (section padded)
- `01-2-Core-Concepts` (slug not lowercase)
## Normalization Functions
**CRITICAL**: All agents MUST use these normalization functions to ensure consistency.
### normalizeChapter(chapter)
Converts any chapter format to canonical 2-digit zero-padded string.
```
Input: "1" or "01" or 1 or "001"
Output: "01" (always 2-digit zero-padded string)
Process:
1. Convert to integer: parseInt(chapter, 10)
2. Zero-pad to 2 digits: String(n).padStart(2, '0')
Examples:
- "1" → "01"
- "01" → "01"
- "10" → "10"
- 1 → "01"
- "001" → "01"
```
### normalizeSection(section)
Converts any section format to canonical single-digit string (no padding).
```
Input: "1" or "01" or 1
Output: "1" (single digit, no padding)
Process:
1. Convert to integer: parseInt(section, 10)
2. Convert to string: String(n)
Examples:
- "1" → "1"
- "01" → "1"
- "3" → "3"
- "03" → "3"
```
### generateSlug(title)
Converts title to canonical kebab-case slug.
```
Input: Any title string
Output: Lowercase kebab-case slug
Process:
1. Convert to lowercase: title.toLowerCase()
2. Replace spaces with hyphens: replace(/\s+/g, '-')
3. Remove special characters (keep a-z, 0-9, -): replace(/[^a-z0-9-]/g, '')
4. Collapse multiple hyphens: replace(/-+/g, '-')
5. Trim leading/trailing hyphens: replace(/^-|-$/g, '')
Examples:
- "Core Concepts" → "core-concepts"
- "What is React?" → "what-is-react"
- "Setup & Installation" → "setup-installation"
- " Multiple Spaces " → "multiple-spaces"
- "C++ Programming" → "c-programming"
```
### buildCanonicalPath(chapter, section, title)
Builds the canonical directory path.
```
Input: chapter, section, title
Output: ".research/sections/{canonical_chapter}-{canonical_section}-{canonical_slug}/"
Process:
1. canonical_chapter = normalizeChapter(chapter)
2. canonical_section = normalizeSection(section)
3. canonical_slug = generateSlug(title)
4. return ".research/sections/{canonical_chapter}-{canonical_section}-{canonical_slug}/"
Example:
- buildCanonicalPath("1", "02", "Core Concepts")
- → ".research/sections/01-2-core-concepts/"
```
## File Path Generation
### For /init Research
```
.research/init/summary.md
.research/init/sources.md
```
### For Section Research
```
.research/sections/{chapter}-{section}-{slug}/research.md
.research/sections/{chapter}-{section}-{slug}/sources.md
```
**Example**: Section 1.2 "Core Concepts"
```
.research/sections/01-2-core-concepts/research.md
.research/sections/01-2-core-concepts/sources.md
```
## File Format Templates
### summary.md (for /init)
```markdown
# Research Summary
> Generated: {YYYY-MM-DD}
> Topic: {topic}
> Domain: {domain}
## Key Concepts
### {Concept 1}
- **Definition**: {clear definition}
- **Importance**: {why it matters}
- **Source**: [{source name}]({url})
### {Concept 2}
- **Definition**: {clear definition}
- **Importance**: {why it matters}
- **Source**: [{source name}]({url})
## Learning Path
1. **Prerequisites**: {comma-separated list}
2. **Fundamentals**: {comma-separated list}
3. **Core Skills**: {comma-separated list}
4. **Advanced Topics**: {comma-separated list}
## Current Trends ({current_year})
- {trend 1 with source link}
- {trend 2 with source link}
## Domain-Specific Information
{domain-specific sections based on domain-profiles skill}
```
### sources.md (for both /init and sections)
```markdown
# Source Registry
> Section: {section_id or "init"}
> Generated: {YYYY-MM-DD}
## Primary Sources (High Reliability)
| Source | URL | Type | Last Verified |
| ------ | ----- | ------------- | ------------- |
| {name} | {url} | Official Docs | {YYYY-MM-DD} |
| {name} | {url} | Official Docs | {YYYY-MM-DD} |
## Secondary Sources (Medium Reliability)
| Source | URL | Type | Notes |
| ------ | ----- | -------- | ------- |
| {name} | {url} | Tutorial | {notes} |
| {name} | {url} | Blog | {notes} |
## Rejected Sources
| Source | Reason |
| ------ | ----------------- |
| {name} | Outdated (year) |
| {name} | Unreliable author |
```
### research.md (for sections)
````markdown
# Research: {Section Title}
> Section: {chapter}.{section} {title}
> Target Pages: {N}p
> Generated: {YYYY-MM-DD}
## Scope
{Brief description of what this section covers}
## Key Concepts
### {Concept 1}
- **Definition**: {definition}
- **Source**: [{name}]({url})
### {Concept 2}
- **Definition**: {definition}
- **Source**: [{name}]({url})
## Code Examples
### {Example Title}
```{language}
{code}
```
> Source: [{name}]({url})
## Common Pitfalls
1. **{Pitfall 1}**: {description}
- **Cause**: {why it happens}
- **Solution**: {how to avoid}
2. **{Pitfall 2}**: {description}
- **Cause**: {why it happens}
- **Solution**: {how to avoid}
## Practical Insights
- {insight 1 with source link}
- {insight 2 with source link}
## Subtopic Coverage
| Subtopic | Status | Source |
| -------- | -------- | ----------------- |
| {name} | Complete | [{source}]({url}) |
| {name} | Partial | [{source}]({url}) |
| {name} | Missing | - |
````
## Directory Resolution Strategy
When locating research directories, use multi-tier search to handle naming inconsistencies from legacy data or different generation sources.
### Why Multi-Tier Search?
Research directories may have been created with inconsistent naming:
| Inconsistency Type | Example Mismatch |
| ---------------------- | -----------Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.