Claude-skill-registry cyberarian
The digital librarian for Claude Code projects. Enforces structured document lifecycle management - organizing, indexing, and archiving project documentation automatically. Use when creating, organizing, or managing project documentation. Ensures documents are created in the proper `docs/` directory structure with required metadata, handles temporary documents in system temp directories, maintains an auto-generated index, and performs automatic archiving of old/complete documents. Use for any task involving document creation, organization, or maintenance.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/cyberarian" ~/.claude/skills/majiayu000-claude-skill-registry-cyberarian && rm -rf "$T"
skills/data/cyberarian/SKILL.mdCyberarian - Document Lifecycle Management
This skill enforces a structured approach to documentation in Claude Code projects, ensuring consistency, discoverability, and automatic maintenance.
Core Principles
- Structured Organization: All persistent documentation goes in
with semantic categorizationdocs/ - No Temporary Docs in docs/: Ephemeral/scratch documents belong in
or system temp, never in/tmpdocs/ - Metadata-Driven: YAML frontmatter enables automation and lifecycle management
- Automatic Maintenance: Indexing and archiving happen automatically, not manually
- Context Efficiency: Bulk operations delegate to subagents to preserve main context
Context-Efficient Operations
The Problem
Document management operations can produce verbose output that pollutes the main agent's context:
- Validation scripts listing many errors across files
- Index generation scanning dozens of documents
- Archive operations listing all files being moved
- Search results returning many matches
The Solution: Subagent Delegation
Delegate to Task subagent for operations that return verbose output. The subagent absorbs the verbose output in its isolated context and returns a concise summary (<50 tokens).
Delegation Rules
Execute directly (simple, low-output):
- Creating a single document from template
- Reading a specific document's metadata
- Checking if
directory existsdocs/
Delegate to Task subagent (complex, verbose):
- Running validation across all documents
- Regenerating the index
- Archiving operations (especially dry-run)
- Searching documents by tag/status/category
- Summarizing INDEX.md contents
- Any operation touching multiple files
Delegation Pattern
When verbose output is expected:
1. Recognize the operation will be verbose 2. Delegate to Task subagent with explicit instructions 3. Subagent executes scripts, absorbs output 4. Subagent parses and returns summary <50 tokens 5. Main agent receives only essential summary
Task subagent prompt format:
Execute document operation and return concise summary: - Run: [command] - Parse: Extract [specific data needed] - Return: [emoji] [state] | [metric] | [next action] - Limit: <50 tokens Use agents/doc-librarian-subagent.md patterns for response formatting.
Response Formats
Success:
✓ [result] | [metric] | Next: [action]
List: 📋 [N] items: [item1], [item2], ... (+[remainder] more)
Error: ❌ [operation] failed | Reason: [brief] | Fix: [action]
Warning: ⚠️ [concern] | Impact: [brief] | Consider: [action]
Directory Structure
docs/ ├── README.md # Human-written guide to the structure ├── INDEX.md # Auto-generated index of all documents ├── ai_docs/ # Reference materials for Claude Code (SDKs, APIs, repo context) ├── specs/ # Feature and migration specifications ├── analysis/ # Investigation outputs (bugs, optimization, cleanup) ├── plans/ # Implementation plans ├── templates/ # Reusable templates └── archive/ # Historical and completed documents ├── specs/ ├── analysis/ └── plans/
Workflows
First-Time Setup
When a project doesn't have a
docs/ directory:
-
Initialize the structure:
python scripts/init_docs_structure.pyThis creates all directories, README.md, and initial INDEX.md
-
Inform the user about the structure and conventions
Creating a New Document
When asked to create documentation (specs, analysis, plans, etc.):
-
Determine the category:
- ai_docs: SDKs, API references, repo architecture, coding conventions
- specs: Feature specifications, migration plans, technical designs
- analysis: Bug investigations, performance analysis, code audits
- plans: Implementation plans, rollout strategies, task breakdowns
- templates: Reusable document templates
-
Use the template:
cp assets/doc_template.md docs/<category>/<descriptive-name>.md -
Fill in metadata:
- Set
,title
,category
,status
,createdlast_updated - Add relevant
tags - Start with
status: draft
- Set
-
Write the content following the document structure
-
Update the index:
python scripts/index_docs.py
File naming convention: Use lowercase with hyphens, descriptive names:
- ✅
oauth2-migration-spec.md - ✅
auth-performance-analysis.md - ❌
spec1.md - ❌
MyDocument.md
Working with Existing Documents
When modifying existing documentation:
-
Update metadata:
- Set
to current datelast_updated - Update
if lifecycle changes (draft → active → complete)status
- Set
-
Regenerate index if significant changes:
python scripts/index_docs.py
Creating Temporary/Scratch Documents
When creating ephemeral documents (scratchpads, temporary notes, single-use docs):
NEVER create in docs/ - Use system temp instead:
# Create in /tmp for Linux/macOS /tmp/scratch-notes.md /tmp/debug-output.txt # Let the system clean up temporary files
Why: The
docs/ directory is for persistent, managed documentation. Temporary files clutter the structure and interfere with indexing and archiving.
Regular Maintenance
When to run:
- After creating/modifying documents: Update index
- Weekly/monthly: Run archiving to clean up completed work
- Before commits: Validate metadata
Maintenance workflow (delegate to Task subagent for context efficiency):
-
Validate metadata → Delegate to subagent:
Task: Run python scripts/validate_doc_metadata.py Return: ✓ [N] valid | [N] issues: [list top 3] | Next: [action] -
Archive old documents → Delegate to subagent:
Task: Run python scripts/archive_docs.py --dry-run Return: 📦 [N] ready for archive: [list top 3] | Next: Run archive Task: Run python scripts/archive_docs.py Return: ✓ Archived [N] docs | Categories: [list] | Index updated -
Update index → Delegate to subagent:
Task: Run python scripts/index_docs.py Return: ✓ Index updated | [N] documents | Categories: [summary]
Why delegate? These operations can scan dozens of files and produce verbose output. Subagent isolation keeps the main context clean for reasoning.
Archiving Documents
Archiving happens automatically based on category-specific rules. See
references/archiving-criteria.md for full details.
Quick reference:
: Auto-archive whenspecs/
AND >90 daysstatus: complete
: Auto-archive whenanalysis/
AND >60 daysstatus: complete
: Auto-archive whenplans/
AND >30 daysstatus: complete
: Manual archiving onlyai_docs/
: Never auto-archivetemplates/
To prevent auto-archiving, set in frontmatter:
archivable_after: 2025-12-31
Metadata Requirements
Every document must have YAML frontmatter. See
references/metadata-schema.md for complete schema.
Minimal required frontmatter:
--- title: Document Title category: specs status: draft created: 2024-11-16 last_updated: 2024-11-16 tags: [] ---
Lifecycle statuses:
→ Document being createddraft
→ Current and relevantactive
→ Work done, kept for referencecomplete
→ Moved to archivearchived
Reference Files
Load these when needed for detailed guidance:
- references/metadata-schema.md: Complete YAML frontmatter specification
- references/archiving-criteria.md: Detailed archiving rules and philosophy
- agents/doc-librarian-subagent.md: Subagent template for context-efficient operations
Scripts Reference
All scripts accept optional path argument (defaults to current directory):
- Initialize docs structurescripts/init_docs_structure.py [path]
- Regenerate INDEX.mdscripts/index_docs.py [path]
- Archive old documentsscripts/archive_docs.py [path] [--dry-run]
- Validate all metadatascripts/validate_doc_metadata.py [path]
Common Patterns
Creating a Specification
# Copy template cp assets/doc_template.md docs/specs/new-feature-spec.md # Edit with proper metadata # category: specs # status: draft # tags: [feature-name, relevant-tags] # Update index python scripts/index_docs.py
Completing Work
# Update document metadata # status: draft → active → complete # last_updated: <current-date> # After a while, archiving script will auto-archive python scripts/archive_docs.py
Finding Documents
Delegate searches to subagent for context efficiency:
Task: Summarize docs/INDEX.md Return: 📊 [N] total docs | Categories: [breakdown] | Recent: [latest doc] Task: Search docs for tag "performance" Run: grep -r "tags:.*performance" docs/ --include="*.md" | head -10 Return: 📋 [N] docs match: [path1], [path2], ... | Next: Read [most relevant] Task: Find all draft documents Run: grep -r "status: draft" docs/ --include="*.md" Return: 📋 [N] drafts: [list top 5] | Next: [action]
Direct execution (only for quick checks):
# Check if docs/ exists ls docs/ 2>/dev/null
Best Practices
- Always use metadata: Don't skip the frontmatter, it enables automation
- Keep status current: Update as work progresses (draft → active → complete)
- Use descriptive names: File names should be clear and searchable
- Update dates: Set
when making significant changeslast_updated - Run maintenance regularly: Index and archive periodically
- Temp goes in /tmp: Never create temporary/scratch docs in docs/
- Validate before committing: Run
to catch issuesvalidate_doc_metadata.py - Delegate bulk operations: Use Task subagents for validation, indexing, archiving, and search to preserve main context
Error Handling
Document has no frontmatter:
- Add frontmatter using
as referenceassets/doc_template.md - Run
to confirmvalidate_doc_metadata.py
Document in wrong category:
- Move file to correct category directory
- Update
field in frontmatter to matchcategory - Regenerate index
Archived document still needed:
- Move from
back toarchive/<category>/<category>/ - Update
fromstatus
toarchivedactive - Remove
andarchived_date
fieldsarchive_reason - Regenerate index