Skip to main content

skill-learn

Scan codebase for FIX:/NOTE:/TODO:/QUESTION: tags and create structured tasks with interactive selection. Invoke for /learn command.

소스 정보

저장소
benbrastmckie/nvim
최근 소스 활동
2026년 5월 8일 01:29
감지된 SKILL.md 언어
영어
스타
443
포크
458

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
skill-learn
description
Scan codebase for FIX:/NOTE:/TODO:/QUESTION: tags and create structured tasks with interactive selection. Invoke for /learn command.
# Learn Skill (Direct Execution) Direct execution skill for scanning files, presenting findings interactively, and creating user-selected tasks. Replaces the previous delegation-based approach with synchronous execution and AskUserQuestion prompts. **Key behavior**: Users always see tag scan results BEFORE any tasks are created. Users select which task types to create via interactive prompts. ## Context References Reference (do not load eagerly): - Path: `@specs/TODO.md` - Current task list - Path: `@specs/state.json` - Machine state --- ## Execution ### Step 1: Parse Arguments Extract paths from command input: ```bash # Parse from command input paths="$ARGUMENTS" # Default to project root if no paths specified if [ -z "$paths" ]; then paths="." fi ``` **Note**: The `--dry-run` flag is no longer supported. The interactive flow is inherently "preview first" - users always see findings before any tasks are created. ### Step 2: Generate Session ID Generate session ID for tracking: ```bash session_id="sess_$(date +%s)_$(od -An -N3 -tx1 /dev/urandom | tr -d ' ')" ``` ### Step 3: Execute Tag Extraction Scan for tags using file-type-specific patterns. Use Bash with grep for consistent output parsing. #### 3.1: Extract FIX: Tags **Lua files (Neovim config)**: ```bash grep -rn --include="*.lua" "-- FIX:" $paths 2>/dev/null || true ``` **LaTeX files**: ```bash grep -rn --include="*.tex" "% FIX:" $paths 2>/dev/null || true ``` **Markdown files**: ```bash grep -rn --include="*.md" "<!-- FIX:" $paths 2>/dev/null || true ``` **Python/Shell/YAML files**: ```bash grep -rn --include="*.py" --include="*.sh" --include="*.yaml" --include="*.yml" "# FIX:" $paths 2>/dev/null || true ``` #### 3.2: Extract NOTE: Tags Same patterns as above, replacing `FIX:` with `NOTE:`. #### 3.3: Extract TODO: Tags Same patterns as above, replacing `FIX:` with `TODO:`. #### 3.4: Extract QUESTION: Tags **Lua files (Neovim config)**: ```bash grep -rn --include="*.lua" "-- QUESTION:" $paths 2>/dev/null || true ``` **LaTeX files**: ```bash grep -rn --include="*.tex" "% QUESTION:" $paths 2>/dev/null || true ``` **Markdown files**: ```bash grep -rn --include="*.md" "<!-- QUESTION:" $paths 2>/dev/null || true ``` **Python/Shell/YAML files**: ```bash grep -rn --include="*.py" --include="*.sh" --include="*.yaml" --include="*.yml" "# QUESTION:" $paths 2>/dev/null || true ``` #### 3.5: Parse Results For each grep match, extract: - File path - Line number - Tag type (FIX, NOTE, TODO, QUESTION) - Tag content (text after the tag) Example raw output: ``` nvim/lua/plugins/telescope.lua:67:-- TODO: Add custom picker for git worktrees docs/KEYMAPS.md:89:<!-- FIX: Update keymap table with new bindings --> nvim/lua/config/lsp.lua:45:-- QUESTION: What is the best way to configure LSP hover windows? ``` Categorize into four arrays: - `fix_tags[]` - All FIX: tags - `note_tags[]` - All NOTE: tags - `todo_tags[]` - All TODO: tags - `question_tags[]` - All QUESTION: tags ### Step 4: Display Tag Summary Present findings to user BEFORE any selection: ``` ## Tag Scan Results **Files Scanned**: {paths} **Tags Found**: {total_count} ### FIX: Tags ({count}) - `{file}:{line}` - {content} - ... ### NOTE: Tags ({count}) - `{file}:{line}` - {content} - ... ### TODO: Tags ({count}) - `{file}:{line}` - {content} - ... ### QUESTION: Tags ({count}) - `{file}:{line}` - {content} - ... ``` ### Step 5: Handle Edge Cases #### No Tags Found If no tags found: ``` ## No Tags Found Scanned files in: {paths} No FIX:, NOTE:, TODO:, or QUESTION: tags detected. Nothing to create. ``` Exit gracefully without prompts. #### Only Certain Tag Types Only show task type options for tag types that exist: - FIX: tags exist -> offer "fix-it task" - NOTE: tags exist -> offer "fix-it task" AND "learn-it task" - TODO: tags exist -> offer "TODO tasks" - QUESTION: tags exist -> offer "Research tasks" ### Step 6: Task Type Selection If tags were found, prompt user to select task types: ```json { "question": "Which task types should be created?", "header": "Task Types", "multiSelect": true, "options": [ { "label": "fix-it task", "description": "Combine {N} FIX:/NOTE: tags into single task" }, { "label": "learn-it task", "description": "Update context from {N} NOTE: tags" }, { "label": "TODO tasks", "description": "Create tasks for {N} TODO: items" }, { "label": "Research tasks", "description": "Create research tasks for {N} QUESTION: items" } ] } ``` **Important**: Only include options where the tag type exists: - Include "fix-it task" only if FIX: or NOTE: tags exist - Include "learn-it task" only if NOTE: tags exist - Include "TODO tasks" only if TODO: tags exist - Include "Research tasks" only if QUESTION: tags exist If user selects nothing, exit gracefully: ``` No task types selected. No tasks created. ``` ### Step 7: Individual TODO Selection If "TODO tasks" was selected AND there are TODO: tags: #### Standard Case (<=20 TODOs) ```json { "question": "Select TODO items to create as tasks:", "header": "TODO Selection", "multiSelect": true, "options": [ { "label": "{content truncated to 50 chars}", "description": "{file}:{line}" }, ... ] } ``` #### Large Number of TODOs (>20) Add a "Select all" option at the top: ```json { "question": "Select TODO items to create as tasks:", "header": "TODO Selection (many items)", "multiSelect": true, "options": [ { "label": "Select all ({N} items)", "description": "Create a task for every TODO tag" }, { "label": "{content truncated to 50 chars}", "description": "{file}:{line}" }, ... ] } ``` If "Select all" is chosen, include all TODOs. Otherwise, only selected items. ### Step 7.5: Topic Grouping for TODO Items **Condition**: User selected "TODO tasks" AND selected more than 1 TODO item If only 1 TODO item was selected, skip to Step 8 (no grouping benefit). #### 7.5.1: Extract Topic Indicators For each selected TODO item, extract topic indicators: **Key Terms**: Extract significant words from the TODO content (nouns, verbs). Ignore stop words (the, a, is, to, for, etc.). **File Section**: Group by file path prefix (e.g., `Logos/Layer1/` vs `Logos/Shared/`). **Action Type**: Identify common action patterns: - "Add/Implement/Create" → implementation tasks - "Fix/Handle/Correct" → fix tasks - "Document/Update docs" → documentation tasks - "Test/Verify" → testing tasks - "Refactor/Optimize" → improvement tasks Example extraction: ``` TODO: "Add custom picker for worktrees" at nvim/lua/plugins/telescope.lua:67 → key_terms: ["picker", "worktrees", "telescope"] → file_section: "nvim/lua/plugins/" → action_type: "implementation" TODO: "Add preview window for worktrees" at nvim/lua/plugins/telescope.lua:89 → key_terms: ["preview", "worktrees", "telescope"] → file_section: "nvim/lua/plugins/" → action_type: "implementation" TODO: "Optimize lazy loading" at nvim/lua/config/lazy.lua:23 → key_terms: ["optimize", "lazy", "loading"] → file_section: "nvim/lua/config/" → action_type: "improvement" ``` #### 7.5.2: Cluster TODOs by Shared Terms Group TODOs that share **2 or more significant terms** or share **file section + action type**. **Clustering algorithm**: 1. Start with first TODO as initial group 2. For each remaining TODO: - If shares 2+ key terms with existing group → add to group - If shares file_section AND action_type with existing group → add to group - Otherwise → start new group 3. Generate topic label from most common shared terms in group **Example clustering**: ``` Group 1: "Telescope Worktrees" (shared: worktrees, telescope, nvim/lua/plugins/, implementation) - Add custom picker for worktrees - Add preview window for worktrees Group 2: "Config Optimization" (shared: nvim/lua/config/, improvement) - Optimize lazy loading ``` **Single-item groups**: If a TODO doesn't cluster with others, it becomes its own single-item group. #### 7.5.3: Store Grouped Topics Store the topic groups for use in Step 7.5.4: ``` topic_groups = [ { label: "Telescope Worktrees", items: [ {file: "nvim/lua/plugins/telescope.lua", line: 67, content: "Add custom picker for worktrees"}, {file: "nvim/lua/plugins/telescope.lua", line: 89, content: "Add preview window for worktrees"} ], shared_terms: ["worktrees", "telescope"], action_type: "implementation" }, { label: "Config Optimization", items: [ {file: "nvim/lua/config/lazy.lua", line: 23, content: "Optimize lazy loading"} ], shared_terms: [], action_type: "improvement" } ] ``` ### Step 7.5.4: Topic Group Confirmation **Condition**: topic_groups contains at least one group with 2+ items If all groups have only 1 item, skip to Step 8 (no grouping benefit). Present topic groups via AskUserQuestion: ```json { "question": "How should TODO items be grouped into tasks?", "header": "TODO Topic Grouping", "multiSelect": false, "options": [ { "label": "Accept suggested topic groups", "description": "Creates {N} grouped tasks: {group_summaries}" }, { "label": "Keep as separate tasks", "description": "Creates {M} individual tasks (one per TODO item)" }, { "label": "Create single combined task", "description": "Creates 1 task containing all {M} TODO items" } ] } ``` Where: - `{N}` = number of topic groups - `{M}` = total number of selected TODO items - `{group_summaries}` = comma-separated list like "S5 Theorems (2 items), Utility Optimization (1 item)" **Store user choice**: `grouping_mode = "grouped" | "separate" | "combined"` ### Step 7.6: Individual QUESTION Selection **Condition**: User selected "Research tasks" in Step 6 AND QUESTION: tags exist If "Research tasks" was selected AND there are QUESTION: tags: #### Standard Case (<=20 QUESTIONs) ```json { "question": "Select QUESTION items to create as research tasks:", "header": "QUESTION Selection",
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기