Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Bidirectional sync between Obsidian PKM (human-friendly notes) and structured ontology (machine-queryable graph). Automatically extracts entities and relatio...
Bidirectional sync between Obsidian PKM (human-friendly notes) and structured ontology (machine-queryable graph). Automatically extracts entities and relatio...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Philosophy: Obsidian is PRIMARY (human writes natural notes) β Ontology is DERIVED (machine extracts structure) β Feedback loop improves both
Obsidian Notes (Markdown) β Extract (every 3 hours) Ontology Graph (Structured) β Query & Analyze Insights & Suggestions β Feedback Improved Note Templates
SituationActionAfter creating/updating contactsRun sync to extract entitiesBefore business queriesSync then query ontologyWeekly reviewSync + analyze + get suggestionsNew project setupExtract entities + suggest structureTeam status trackingSync daily-status β ontology β analytics
Extracts: Person entity (name, email, phone) works_at β Organization met_at β Event assigned_to β Project (if mentioned) status β (prospect, warm_lead, client, etc.) Example: # Alice Johnson **Email:** alice@company.com **Company:** Acme Corp **Met At:** Tech Conference 2026 **Projects:** Project Alpha ## Notes Great developer, responsive communication. Becomes: { "entity": { "id": "person_alice_johnson", "type": "Person", "properties": { "name": "Alice Johnson", "email": "alice@company.com", "notes": "Great developer, responsive communication" } }, "relations": [ {"from": "person_alice_johnson", "rel": "works_at", "to": "org_acme"}, {"from": "person_alice_johnson", "rel": "met_at", "to": "event_tech_conference_2026"}, {"from": "person_alice_johnson", "rel": "assigned_to", "to": "project_alpha"} ] }
Extracts: Organization entity has_contract_value β number projects β Project entities primary_contact β Person
Extracts: Person entity works_for β Organization assigned_to β Project[] reports_to β Person response_pattern β (proactive, reactive, non-responsive)
Extracts: response_time property on Person status_update β Event blockers β Issue entities behavioral_pattern tracking
Extracts: Project entity for_client β Organization team β Person[] status, value, deadline
# Run extraction python3 skills/obsidian-ontology-sync/scripts/sync.py extract # What it does: # 1. Scan configured Obsidian directories # 2. Parse markdown frontmatter + content # 3. Extract entities (Person, Project, Organization, etc.) # 4. Extract relationships (works_at, assigned_to, etc.) # 5. Write to ontology using append-only operations Detection Rules: # Contact files if file.startswith("references/contacts/"): entity_type = "Person" extract_email_from_content() extract_company_from_property("Company:") extract_projects_from_links([[Project]]) # Client files if file.startswith("references/clients/"): entity_type = "Organization" extract_contract_value() extract_projects() # Team files if file.startswith("references/team/"): entity_type = "Person" role = "team_member" extract_assignments() extract_response_patterns()
# Run analytics python3 skills/obsidian-ontology-sync/scripts/sync.py analyze # Generates insights like: # - "3 team members have no assigned projects" # - "Contact 'John Doe' missing email address" # - "Project 'X' has 5 people but no client linked" # - "10 contacts from AI Summit not linked to follow-up tasks"
# /root/life/pkm/ontology-sync/config.yaml obsidian: vault_path: /root/life/pkm # What to sync sources: contacts: path: references/contacts entity_type: Person extract: - email_from_content - company_from_property - projects_from_links clients: path: references/clients entity_type: Organization extract: - contract_value - projects - contacts team: path: references/team entity_type: Person role: team_member extract: - assignments - response_patterns - reports_to daily_status: path: daily-status extract: - response_times - behavioral_patterns - blockers ontology: storage_path: /root/life/pkm/memory/ontology format: jsonl # or sqlite for scale # Entity types to track entities: - Person - Organization - Project - Event - Task # Relationships to extract relationships: - works_at - assigned_to - met_at - for_client - reports_to - has_task - blocks feedback: output_path: /root/life/pkm/ontology-sync/feedback generate_reports: true suggest_templates: true highlight_missing: true schedule: # Run via cron every 3 hours sync_interval: "0 */3 * * *" analyze_daily: "0 9 * * *" # 9 AM daily feedback_weekly: "0 10 * * MON" # Monday 10 AM
# Add to OpenClaw cron python3 skills/obsidian-ontology-sync/scripts/setup-cron.py # Or manually via cron tool cron add \ --schedule "0 */3 * * *" \ --task "python3 skills/obsidian-ontology-sync/scripts/sync.py extract" \ --label "Obsidian β Ontology Sync" Cron Jobs Created: Every 3 hours: Extract entities from Obsidian β Update ontology Daily 9 AM: Run analytics and generate insights Weekly Monday 10 AM: Generate feedback report + template suggestions
Once synced, you can query: # All team members on high-value projects python3 skills/ontology/scripts/ontology.py query \ --type Person \ --where '{"role":"team_member"}' \ --related assigned_to \ --filter '{"type":"Project","value__gt":400000}' # Contacts from specific event not yet followed up python3 skills/ontology/scripts/ontology.py query \ --type Person \ --where '{"met_at":"event_tech_conference_2026"}' \ --missing has_task # Team response patterns python3 skills/ontology/scripts/ontology.py query \ --type Person \ --where '{"role":"team_member"}' \ --aggregate response_pattern # Projects by client python3 skills/ontology/scripts/ontology.py query \ --type Project \ --group-by for_client \ --count
# Before a meeting "Show me all interactions with Client X" # Resource planning "Which team members are on <3 projects?" # Sales pipeline "Contacts met at conferences in last 30 days without follow-up"
Zero Extra Work: Just keep writing normal Obsidian notes Automatic Structure: Ontology extracted automatically Powerful Queries: Find patterns across all your data Quality Improvement: Feedback loop catches missing info No Double Entry: Single source of truth (Obsidian)
Track who's on which project (auto-extracted) Monitor response patterns (from daily-status) Identify unbalanced workloads Find blockers across projects
Track contact network (who you met, where, when) Follow-up reminders (contacted >7 days ago) Relationship mapping (who knows who) Pipeline insights (prospects β warm β clients)
Project valuations (extracted from client notes) Team cost allocation (people β projects β revenue) Revenue forecasting (active projects Γ value)
/root/life/pkm/ βββ references/ β βββ contacts/ # Source notes (you write these) β βββ clients/ # Source notes β βββ team/ # Source notes βββ daily-status/ # Source notes βββ projects/ # Source notes β βββ memory/ontology/ # Generated ontology β βββ graph.jsonl # Entity/relation storage β βββ schema.yaml # Type definitions β βββ ontology-sync/ # Sync outputs βββ config.yaml # Your config βββ feedback/ β βββ daily-insights.md β βββ weekly-feedback.md β βββ suggestions.md βββ logs/ βββ sync-YYYY-MM-DD.log
Future capability: Update Obsidian notes FROM ontology insights: # Automatically add missing fields python3 skills/obsidian-ontology-sync/scripts/sync.py apply-feedback # What it does: # - Adds missing email field to contact notes # - Creates suggested project files # - Links related entities # - Updates frontmatter Safety: Always creates backup before modifying files.
ApproachProsConsManual ontologyFull controlToo much work, falls behindObsidian onlySimpleNo structured queriesOntology onlyPowerful queriesNot human-friendlyThis skillBest of bothInitial setup needed
# Already have ontology skill installed clawhub install obsidian # If not already installed
python3 skills/obsidian-ontology-sync/scripts/init.py # Creates: # - config.yaml with your vault path # - ontology directory structure # - cron jobs
# Manual first sync to test python3 skills/obsidian-ontology-sync/scripts/sync.py extract --dry-run # See what would be extracted # Review, then run for real: python3 skills/obsidian-ontology-sync/scripts/sync.py extract
python3 skills/obsidian-ontology-sync/scripts/setup-cron.py # Confirms cron jobs: # β Sync every 3 hours # β Daily analysis at 9 AM # β Weekly feedback Monday 10 AM
# Try some queries python3 skills/obsidian-ontology-sync/scripts/query.py "team members on high value projects"
# Dry run to see what would be extracted python3 skills/obsidian-ontology-sync/scripts/sync.py extract --dry-run --verbose # Check specific file python3 skills/obsidian-ontology-sync/scripts/debug.py \ --file references/contacts/Alice.md
# Check what's in ontology python3 skills/ontology/scripts/ontology.py query --type Person # Verify sync ran cat /root/life/pkm/ontology-sync/logs/sync-latest.log
# Manually run analysis python3 skills/obsidian-ontology-sync/scripts/sync.py analyze python3 skills/obsidian-ontology-sync/scripts/sync.py feedback
1.0.0 (2026-02-27) - Initial version with extraction, analysis, feedback loop Author: Built for team management, contact tracking, and business intelligence at scale License: MIT Tags: obsidian, ontology, knowledge-graph, pkm, automation, sync
Agent frameworks, memory systems, reasoning layers, and model-native orchestration.
Largest current source with strong distribution and engagement signals.