Skill: agenticio/note (version 2.1.0)

--- name: note description: Knowledge capture and connection system with automatic organization and retrieval. Use when user mentions taking notes, capturing ideas, recording insights, or finding previous notes. Captures from any context, organizes automatically by topic and project, surfaces relevant notes when needed, and connects related ideas across domains. All data stored locally. --- # Note Knowledge capture system. Remember everything, find anything. ## Critical Privacy & Safety ### Data Storage (CRITICAL) - **All notes stored locally only**: `memory/notes/` - **No cloud note services** connected - **No external sync** - pure local storage - **No sharing** of notes or ideas - User controls all data retention and deletion ### Data Structure Notes stored in your local workspace: - `memory/notes/notes.json` - All captured notes - `memory/notes/topics.json` - Automatic topic categorization - `memory/notes/projects.json` - Project-based organization - `memory/notes/connections.json` - Connections between notes - `memory/notes/search_index.json` - Search optimization ## Core Workflows ### Capture Note ``` User: "Note: The insight from the book about feedback loops applies to our onboarding problem" → Use scripts/capture_note.py --content "Feedback loops from book apply to onboarding" --context "reading" → Extract note, identify topics, store automatically ``` ### Find Relevant Notes ``` User: "What have I written about onboarding?" → Use scripts/find_notes.py --query "onboarding" --context current → Surface all notes related to onboarding, including unexpected connections ``` ### Prepare for Meeting ``` User: "I'm meeting with Sarah tomorrow" → Use scripts/prep_meeting.py --person "Sarah" → Pull all previous notes about Sarah, her projects, commitments made ``` ### Connect Ideas ``` User: "This reminds me of something I read last month" → Use scripts/connect_notes.py --current-note "NOTE-123" --search "last month" → Find and surface related notes, create explicit connection ``` ### Transform to Knowledge ``` User: "Synthesize my notes on product strategy" → Use scripts/synthesize.py --topic "product-strategy" → Transform scattered notes into coherent framework ``` ## Module Reference - **Capture System**: See [references/capture.md](references/capture.md) - **Automatic Organization**: See [references/organization.md](references/organization.md) - **Retrieval & Search**: See [references/retrieval.md](references/retrieval.md) - **Connection Building**: See [references/connections.md](references/connections.md) - **Knowledge Synthesis**: See [references/synthesis.md](references/synthesis.md) - **Meeting Preparation**: See [references/meeting-prep.md](references/meeting-prep.md) ## Scripts Reference | Script | Purpose | |--------|---------| | `capture_note.py` | Capture note from any context | | `find_notes.py` | Search and retrieve relevant notes | | `prep_meeting.py` | Prepare notes for meeting | | `connect_notes.py` | Explicitly connect related notes | | `synthesize.py` | Transform notes into knowledge | | `review_recent.py` | Review recent captures | | `organize_project.py` | Organize notes by project | | `build_map.py` | Build knowledge map across domains |

path: scripts/capture_note.py
content: #!/usr/bin/env python3
"""Capture note from any context."""
import json
import os
import uuid
import argparse
from datetime import datetime

NOTES_DIR = os.path.expanduser("~/.openclaw/workspace/memory/notes")
NOTES_FILE = os.path.join(NOTES_DIR, "notes.json")

def ensure_dir():
    os.makedirs(NOTES_DIR, exist_ok=True)

def load_notes():
    if os.path.exists(NOTES_FILE):
        with open(NOTES_FILE, 'r') as f:
            return json.load(f)
    return {"notes": []}

def save_notes(data):
    ensure_dir()
    with open(NOTES_FILE, 'w') as f:
        json.dump(data, f, indent=2)

def main():
    parser = argparse.ArgumentParser(description='Capture note')
    parser.add_argument('--content', required=True, help='Note content')
    parser.add_argument('--context', default='general', help='Context (meeting, reading, thought, etc)')
    parser.add_argument('--project', help='Related project')
    parser.add_argument('--tags', help='Tags (comma-separated)')
    
    args = parser.parse_args()
    
    note_id = f"NOTE-{str(uuid.uuid4())[:6].upper()}"
    
    # Extract topics from content (simplified)
    topics = []
    if args.project:
        topics.append(args.project)
    
    note = {
        "id": note_id,
        "content": args.content,
        "context": args.context,
        "project": args.project,
        "topics": topics,
        "tags": [t.strip() for t in args.tags.split(',') if args.tags],
        "created_at": datetime.now().isoformat(),
        "connections": []
    }
    
    data = load_notes()
    data['notes'].append(note)
    save_notes(data)
    
    print(f"✓ Note captured: {note_id}")
    print(f"  {args.content[:80]}{'...' if len(args.content) > 80 else ''}")
    print(f"  Context: {args.context}")
    if args.project:
        print(f"  Project: {args.project}")

if __name__ == '__main__':
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)