Back to skills
denote-org
Use this skill when working with ~/org/ directory, Denote files (YYYYMMDDTHHMMSS--title__tags.org), or org-mode knowledge bases. Provides scripts for: parsing Denote filenames/metadata, extracting org file TOC, and navigating 3,000+ file PKM systems. Trigger on: ~/org/, ~/org/llmlog/, ~/org/bib/, Denote ID parsing, org heading extraction.
5 stars
0 votes
0 copies
0 views
Added 12/19/2025
developmentpythonbashgitdocumentation
Works with
cli
Install via CLI
$
openskills install junghan0611/org-mode-skillsFiles
SKILL.md
---
name: denote-org
description: "Use this skill when working with ~/org/ directory, Denote files (YYYYMMDDTHHMMSS--title__tags.org), or org-mode knowledge bases. Provides scripts for: parsing Denote filenames/metadata, extracting org file TOC, and navigating 3,000+ file PKM systems. Trigger on: ~/org/, ~/org/llmlog/, ~/org/bib/, Denote ID parsing, org heading extraction."
---
# Denote-Org Skills
## Overview
This skill enables Claude to work with Denote-based Personal Knowledge Management (PKM) systems at scale. Denote is a simple yet powerful note-taking system for Emacs that combines file naming conventions, org-mode structure, and knowledge graph links. This skill provides procedural knowledge and executable scripts for handling 3,000+ file knowledge bases efficiently.
## When to Use This Skill
Claude should use this skill when:
1. **Working with Denote files** - Files named `YYYYMMDDTHHMMSS--title__tag1_tag2.org`
2. **Large-scale PKM systems** - Knowledge bases with hundreds or thousands of org files
3. **Knowledge graph navigation** - Following `[[denote:TIMESTAMP]]` links across files
4. **Multi-silo management** - Searching across multiple Denote directories (~/org/, ~/claude-memory/, project docs/)
5. **Literate programming** - Executing org-mode code blocks with `:tangle` and `:results` options
6. **Denote metadata extraction** - Parsing file names and org-mode frontmatter
7. **Org-mode as primary collaboration format** - When both `.org` and `.md` exist for the same content, treat the org file as the primary, authoritative source and use markdown only as an export/share format.
## What is Denote?
Denote is a note-taking system created by Protesilaos Stavrou that uses:
- **File naming**: `YYYYMMDDTHHMMSS--title__tag1_tag2.org`
- Timestamp = Unique identifier (Denote ID)
- Title = Hyphen-separated (supports 한글/Korean)
- Tags = Underscore-separated (English)
- **Org-mode frontmatter**:
```org
#+title: Title
#+date: [2025-10-21 Tue 10:53]
#+filetags: :tag1:tag2:tag3:
#+identifier: 20251021T105353
```
- **Knowledge graph**: `[[denote:20251021T105353]]` links between files
- **Silo concept**: Separate directories for different knowledge domains
**Validated with 3,000+ org files in production PKM systems.**
## Knowledge Base Structure
> **Location**: `~/org/` (symlink to `~/sync/org/`)
> **Scale**: 3,100+ org files
### Main Directories
| Directory | Purpose | Scale |
|-----------|---------|-------|
| `bib/` | Bibliography notes (books, people, concepts) | 800+ files |
| `meta/` | Meta topics (programming, tools, workflows) | - |
| `notes/` | Personal notes and collections | - |
| `journal/` | Daily/weekly journals | - |
| `llmlog/` | AI/LLM conversation logs | - |
### Content Areas
Philosophy, Science, Programming, AI, Education, Literature, Spirituality, etc.
### How to Find Files
```bash
# Find by Denote ID
fd "20251217T105827" ~/org/ --type f
# Find by tag
fd "__llmlog" ~/org/ --type f
# Find by title keyword
fd "wsl2" ~/org/ --type f
# Search content
rg "검색어" ~/org/ -t org
# List recent files
ls -lt ~/org/llmlog/*.org | head -10
```
### Reference
For detailed knowledge base configuration, see `~/org/AGENTS.md`.
## Core Capabilities
> **Important**: Scripts are executed via Bash, not Python import. Use the CLI commands shown below.
> **Behavioral rule:** When reading org-mode documents, use structured approach: headings → history → focused sections. Only use grep as secondary tool.
### 1. Denote File Name Parsing (✅ Implemented)
**CLI Usage:**
```bash
# Parse a file (filename + frontmatter)
python3 ~/.claude/skills/denote-org/scripts/denote_parser.py ~/org/path/to/file.org
# Parse filename only
python3 ~/.claude/skills/denote-org/scripts/denote_parser.py --filename "20251021T105353--제목__tag.org"
# JSON output (recommended for parsing)
python3 ~/.claude/skills/denote-org/scripts/denote_parser.py --json ~/org/path/to/file.org
```
**Example output (--json):**
```json
{
"path": "/home/user/org/llmlog/20241127T161109--제목__tag1_tag2.org",
"filename_meta": {
"timestamp": "20241127T161109",
"title": "제목",
"tags": ["tag1", "tag2"],
"ext": "org"
},
"frontmatter": {
"title": "제목",
"identifier": "20241127T161109",
"filetags": ["tag1", "tag2"],
"date": "[2024-11-27 Wed 16:11]"
}
}
```
**When to use:**
- Extracting Denote ID from filename
- Getting title and tags without manual parsing
- Processing multiple files in batch
### 2. Org Headings TOC (✅ Implemented)
**CLI Usage:**
```bash
# Extract table of contents from org file
python3 ~/.claude/skills/denote-org/scripts/org_headings_toc.py ~/org/path/to/file.org
```
**Example output:**
```
1 히스토리
1 로그 :LLMLOG:
2 [2024-11-27 Wed 16:11]
3 git 리포지토리에서...
```
Format: `LEVEL<TAB>TITLE` - easy to parse.
**When to use:**
- Quick structural overview of large org files
- Decide which sections to read in detail
- Before reading entire file into context
### 3. Finding Denote Files (🚧 Coming Soon)
```bash
# Not yet implemented - use glob/grep for now
fd --type f "20251021T105353" ~/org/
```
### 4. Denote Link Resolution (🚧 Coming Soon)
```bash
# Not yet implemented - use grep for now
grep -r "20251021T105353" ~/org/ --include="*.org" -l
```
**When to use:
- File contains `[[denote:...]]` links
- Need to open linked files
- Validate link integrity
### 5. Multi-Silo Management
#### 5.1 Preferred org-mode reading strategy
When working with org-mode files in this environment, follow this structured process instead of treating them as plain text:
1. **Identify org-context and silos**
- If a file path matches any of the following, assume it is part of a Denote/org knowledge base and prefer org-mode behavior over ad-hoc grep:
- `~/org/**`
- `~/org/meta/**`
- `~/org/bib/**`
- `~/org/notes/**`
- `~/org/llmlog/**`
- `~/claude-memory/**`
- `~/repos/gh/*/docs/**`
- `~/repos/work/*/docs/**`
- Treat these as **silos** with different roles:
- `~/org/meta` : meta-level models, config, and system design
- `~/org/bib` : bibliography and reference material
- `~/org/notes` : long-form notes and thinking
- `~/org/llmlog`: LLM conversation logs and experiments
- project `docs/`: per-repo documentation tied to code
2. **Parse headings before content**
- For large org files, do not read the entire file into context at once.
- Instead, first extract only:
- The top-level headings (`*`, `**`, `***`)
- Their titles and hierarchy
- Build a lightweight table of contents (TOC) and use that to decide which sections to inspect in detail.
3. **Locate and summarize history sections early**
- If any heading matches common history patterns, treat it as a version/change log and inspect it early:
- `* 히스토리`, `* HISTORY`, `* History`, `* 작업 로그`, `* Changelog`, or similar
- Summarize:
- How the document has evolved over time
- Recent significant changes
- Any explicit version markers or dates
4. **Drill down into relevant sections only**
- After building the TOC and understanding history, only expand the specific headings that are relevant to the current task or user question.
- Use grep/rg as a **secondary tool** to locate candidate sections, then return to structured org parsing for interpretation.
5. **Prefer org over markdown when both exist**
- If both `X.org` and `X.md` exist for the same conceptual document:
- Treat `X.org` as canonical for structure, metadata, and detailed reasoning.
- Use `X.md` only as an export/share artifact or when the user explicitly prefers markdown.
This strategy exists to maximize collaboration on org documents as first-class knowledge artifacts, not just as flat text blobs.
**Common silos:**
- `~/org/` - Main knowledge base (3,000+ files)
- `~/claude-memory/` - AI memory system
- `~/repos/*/docs/` - Project-specific docs
## Quick Start Examples
### Example 1: Parse Denote File
```bash
# Get metadata from a Denote file
python3 ~/.claude/skills/denote-org/scripts/denote_parser.py --json ~/org/llmlog/20241127T161109--제목__tag.org
```
### Example 2: Get TOC Before Reading Large File
```bash
# First, get structure overview
python3 ~/.claude/skills/denote-org/scripts/org_headings_toc.py ~/org/notes/large-file.org
# Output:
# 1 섹션1
# 2 하위섹션
# Then read only relevant sections
```
### Example 3: Find Denote File by ID (using standard tools)
```bash
# Until denote_finder.py is implemented
fd "20251021T105353" ~/org/ --type f
# or
find ~/org -name "*20251021T105353*"
```
## Common Pitfalls
### Korean Encoding
**Problem:** 한글 filenames may cause encoding issues
**Solution:** All scripts use UTF-8
### Large Files
**Problem:** Reading entire large org file exceeds context
**Solution:** Use `org_headings_toc.py` first, then read specific sections
## Available Scripts
```
scripts/
├── denote_parser.py ✅ Parse filenames and frontmatter (--json)
├── org_headings_toc.py ✅ Extract TOC from org file
├── denote_finder.py 🚧 Coming soon
├── denote_linker.py 🚧 Coming soon
└── denote_rename.py 🚧 Coming soon
```
## See Also
- [Denote Package](https://protesilaos.com/emacs/denote) by Protesilaos Stavrou
- [Org-mode](https://orgmode.org/) documentation
Attribution
Comments (0)
No comments yet. Be the first to comment!
