{
  "schemaVersion": "1.0",
  "item": {
    "slug": "obsidian-ontology-sync",
    "name": "Obsidian Ontology Sync",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/parthpandya1729/obsidian-ontology-sync",
    "canonicalUrl": "https://clawhub.ai/parthpandya1729/obsidian-ontology-sync",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/obsidian-ontology-sync",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=obsidian-ontology-sync",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/sync.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "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."
        },
        {
          "label": "Upgrade existing",
          "body": "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."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/obsidian-ontology-sync"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/obsidian-ontology-sync",
    "agentPageUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync/agent",
    "manifestUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "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."
      },
      {
        "label": "Upgrade existing",
        "body": "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."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Obsidian-Ontology Sync",
        "body": "Philosophy: Obsidian is PRIMARY (human writes natural notes) → Ontology is DERIVED (machine extracts structure) → Feedback loop improves both"
      },
      {
        "title": "Core Concept",
        "body": "Obsidian Notes (Markdown)\n    ↓ Extract (every 3 hours)\nOntology Graph (Structured)\n    ↓ Query & Analyze\nInsights & Suggestions\n    ↓ Feedback\nImproved Note Templates"
      },
      {
        "title": "When to Use",
        "body": "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"
      },
      {
        "title": "From Contact Notes (references/contacts/*.md)",
        "body": "Extracts:\n\nPerson entity (name, email, phone)\nworks_at → Organization\nmet_at → Event\nassigned_to → Project (if mentioned)\nstatus → (prospect, warm_lead, client, etc.)\n\nExample:\n\n# Alice Johnson\n\n**Email:** alice@company.com\n**Company:** Acme Corp\n**Met At:** Tech Conference 2026\n**Projects:** Project Alpha\n\n## Notes\nGreat developer, responsive communication.\n\nBecomes:\n\n{\n  \"entity\": {\n    \"id\": \"person_alice_johnson\",\n    \"type\": \"Person\",\n    \"properties\": {\n      \"name\": \"Alice Johnson\",\n      \"email\": \"alice@company.com\",\n      \"notes\": \"Great developer, responsive communication\"\n    }\n  },\n  \"relations\": [\n    {\"from\": \"person_alice_johnson\", \"rel\": \"works_at\", \"to\": \"org_acme\"},\n    {\"from\": \"person_alice_johnson\", \"rel\": \"met_at\", \"to\": \"event_tech_conference_2026\"},\n    {\"from\": \"person_alice_johnson\", \"rel\": \"assigned_to\", \"to\": \"project_alpha\"}\n  ]\n}"
      },
      {
        "title": "From Client Notes (references/clients/*.md)",
        "body": "Extracts:\n\nOrganization entity\nhas_contract_value → number\nprojects → Project entities\nprimary_contact → Person"
      },
      {
        "title": "From Team Notes (references/team/*.md)",
        "body": "Extracts:\n\nPerson entity\nworks_for → Organization\nassigned_to → Project[]\nreports_to → Person\nresponse_pattern → (proactive, reactive, non-responsive)"
      },
      {
        "title": "From Daily Status (daily-status/YYYY-MM-DD/*.md)",
        "body": "Extracts:\n\nresponse_time property on Person\nstatus_update → Event\nblockers → Issue entities\nbehavioral_pattern tracking"
      },
      {
        "title": "From Project Notes (projects/*.md)",
        "body": "Extracts:\n\nProject entity\nfor_client → Organization\nteam → Person[]\nstatus, value, deadline"
      },
      {
        "title": "1. Extract Phase (Markdown → Ontology)",
        "body": "# Run extraction\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract\n\n# What it does:\n# 1. Scan configured Obsidian directories\n# 2. Parse markdown frontmatter + content\n# 3. Extract entities (Person, Project, Organization, etc.)\n# 4. Extract relationships (works_at, assigned_to, etc.)\n# 5. Write to ontology using append-only operations\n\nDetection Rules:\n\n# Contact files\nif file.startswith(\"references/contacts/\"):\n    entity_type = \"Person\"\n    extract_email_from_content()\n    extract_company_from_property(\"Company:\")\n    extract_projects_from_links([[Project]])\n    \n# Client files\nif file.startswith(\"references/clients/\"):\n    entity_type = \"Organization\"\n    extract_contract_value()\n    extract_projects()\n    \n# Team files\nif file.startswith(\"references/team/\"):\n    entity_type = \"Person\"\n    role = \"team_member\"\n    extract_assignments()\n    extract_response_patterns()"
      },
      {
        "title": "2. Analysis Phase (Ontology → Insights)",
        "body": "# Run analytics\npython3 skills/obsidian-ontology-sync/scripts/sync.py analyze\n\n# Generates insights like:\n# - \"3 team members have no assigned projects\"\n# - \"Contact 'John Doe' missing email address\"\n# - \"Project 'X' has 5 people but no client linked\"\n# - \"10 contacts from AI Summit not linked to follow-up tasks\""
      },
      {
        "title": "3. Feedback Phase (Insights → Improve PKM)",
        "body": "# Get suggestions\npython3 skills/obsidian-ontology-sync/scripts/sync.py feedback\n\n# Creates:\n# - Missing property suggestions\n# - Broken link reports\n# - Relationship suggestions\n# - Template improvements\n\nExample Feedback:\n\n# Sync Feedback - 2026-02-27\n\n## Missing Information (10 items)\n- [ ] `Alice Johnson` missing phone number\n- [ ] `Bob` missing email in team file\n- [ ] Project `Project Alpha` missing deadline\n\n## Suggested Links (5 items)\n- [ ] Link `Jane Doe` (TechHub) to organization `TechHub`\n- [ ] Link `Eve` to project (found in daily-status but not in team file)\n\n## Relationship Insights\n- `Project Alpha` team: Alice, Carol, David (extracted from daily-status)\n- Suggest updating project file with team assignments\n\n## Template Suggestions\n- Add `Projects: [[]]` field to contact template\n- Add `Response Pattern:` field to team template"
      },
      {
        "title": "config.yaml",
        "body": "# /root/life/pkm/ontology-sync/config.yaml\n\nobsidian:\n  vault_path: /root/life/pkm\n  \n  # What to sync\n  sources:\n    contacts:\n      path: references/contacts\n      entity_type: Person\n      extract:\n        - email_from_content\n        - company_from_property\n        - projects_from_links\n    \n    clients:\n      path: references/clients\n      entity_type: Organization\n      extract:\n        - contract_value\n        - projects\n        - contacts\n    \n    team:\n      path: references/team\n      entity_type: Person\n      role: team_member\n      extract:\n        - assignments\n        - response_patterns\n        - reports_to\n    \n    daily_status:\n      path: daily-status\n      extract:\n        - response_times\n        - behavioral_patterns\n        - blockers\n\nontology:\n  storage_path: /root/life/pkm/memory/ontology\n  format: jsonl  # or sqlite for scale\n  \n  # Entity types to track\n  entities:\n    - Person\n    - Organization\n    - Project\n    - Event\n    - Task\n  \n  # Relationships to extract\n  relationships:\n    - works_at\n    - assigned_to\n    - met_at\n    - for_client\n    - reports_to\n    - has_task\n    - blocks\n\nfeedback:\n  output_path: /root/life/pkm/ontology-sync/feedback\n  generate_reports: true\n  suggest_templates: true\n  highlight_missing: true\n\nschedule:\n  # Run via cron every 3 hours\n  sync_interval: \"0 */3 * * *\"\n  analyze_daily: \"0 9 * * *\"  # 9 AM daily\n  feedback_weekly: \"0 10 * * MON\"  # Monday 10 AM"
      },
      {
        "title": "Setup Automatic Sync",
        "body": "# Add to OpenClaw cron\npython3 skills/obsidian-ontology-sync/scripts/setup-cron.py\n\n# Or manually via cron tool\ncron add \\\n  --schedule \"0 */3 * * *\" \\\n  --task \"python3 skills/obsidian-ontology-sync/scripts/sync.py extract\" \\\n  --label \"Obsidian → Ontology Sync\"\n\nCron Jobs Created:\n\nEvery 3 hours: Extract entities from Obsidian → Update ontology\nDaily 9 AM: Run analytics and generate insights\nWeekly Monday 10 AM: Generate feedback report + template suggestions"
      },
      {
        "title": "Queries (Using Ontology)",
        "body": "Once synced, you can query:\n\n# All team members on high-value projects\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Person \\\n  --where '{\"role\":\"team_member\"}' \\\n  --related assigned_to \\\n  --filter '{\"type\":\"Project\",\"value__gt\":400000}'\n\n# Contacts from specific event not yet followed up\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Person \\\n  --where '{\"met_at\":\"event_tech_conference_2026\"}' \\\n  --missing has_task\n\n# Team response patterns\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Person \\\n  --where '{\"role\":\"team_member\"}' \\\n  --aggregate response_pattern\n\n# Projects by client\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Project \\\n  --group-by for_client \\\n  --count"
      },
      {
        "title": "Example 1: Missing Email Detection",
        "body": "Ontology finds: Person entity with no email property\n\nFeedback generated:\n\n## Missing Contact Information\n\nThe following team members are missing email addresses:\n\n- [ ] Bob (`references/team/Bob.md`)\n- [ ] Lucky (`references/team/Lucky.md`)\n\n**Suggestion:** Add email field to team member template:\n\\`\\`\\`markdown\n**Email:** \n\\`\\`\\`"
      },
      {
        "title": "Example 2: Broken Project Links",
        "body": "Ontology finds: Person assigned_to Project that doesn't exist\n\nFeedback generated:\n\n## Broken Project References\n\nFound references to projects that don't have dedicated files:\n\n- [ ] \"Project Epsilon\" mentioned in team files but no `projects/Project Epsilon.md`\n- [ ] \"Project Delta Tata DT\" assigned but no project file\n\n**Suggestion:** Create project files with template"
      },
      {
        "title": "Example 3: Relationship Discovery",
        "body": "Ontology finds: Multiple people working at same company\n\nFeedback generated:\n\n## Suggested Company Grouping\n\nFound 3 contacts at \"TechHub\":\n- Jane Doe\n- [2 others from daily-status mentions]\n\n**Suggestion:** Create `references/clients/TechHub.md` and link contacts"
      },
      {
        "title": "Morning Routine (9 AM)",
        "body": "# Cron runs analysis\n# Generates daily-insights.md with:\n- Response rate from yesterday's status requests\n- Projects needing attention (blockers mentioned)\n- Contacts to follow up (met > 3 days ago, no task)"
      },
      {
        "title": "Weekly Review (Monday 10 AM)",
        "body": "# Cron generates weekly feedback\n# Creates suggestions for:\n- Missing information to fill in\n- Broken links to fix\n- New templates to adopt\n- Relationship insights"
      },
      {
        "title": "On-Demand Queries",
        "body": "# Before a meeting\n\"Show me all interactions with Client X\"\n\n# Resource planning\n\"Which team members are on <3 projects?\"\n\n# Sales pipeline\n\"Contacts met at conferences in last 30 days without follow-up\""
      },
      {
        "title": "✅ For You",
        "body": "Zero Extra Work: Just keep writing normal Obsidian notes\nAutomatic Structure: Ontology extracted automatically\nPowerful Queries: Find patterns across all your data\nQuality Improvement: Feedback loop catches missing info\nNo Double Entry: Single source of truth (Obsidian)"
      },
      {
        "title": "✅ For Team Management",
        "body": "Track who's on which project (auto-extracted)\nMonitor response patterns (from daily-status)\nIdentify unbalanced workloads\nFind blockers across projects"
      },
      {
        "title": "✅ For Sales/BD",
        "body": "Track contact network (who you met, where, when)\nFollow-up reminders (contacted >7 days ago)\nRelationship mapping (who knows who)\nPipeline insights (prospects → warm → clients)"
      },
      {
        "title": "✅ For Finance",
        "body": "Project valuations (extracted from client notes)\nTeam cost allocation (people → projects → revenue)\nRevenue forecasting (active projects × value)"
      },
      {
        "title": "File Structure After Sync",
        "body": "/root/life/pkm/\n├── references/\n│   ├── contacts/          # Source notes (you write these)\n│   ├── clients/           # Source notes\n│   └── team/              # Source notes\n├── daily-status/          # Source notes\n├── projects/              # Source notes\n│\n├── memory/ontology/       # Generated ontology\n│   ├── graph.jsonl        # Entity/relation storage\n│   └── schema.yaml        # Type definitions\n│\n└── ontology-sync/         # Sync outputs\n    ├── config.yaml        # Your config\n    ├── feedback/\n    │   ├── daily-insights.md\n    │   ├── weekly-feedback.md\n    │   └── suggestions.md\n    └── logs/\n        └── sync-YYYY-MM-DD.log"
      },
      {
        "title": "Advanced: Bidirectional Sync",
        "body": "Future capability:\n\nUpdate Obsidian notes FROM ontology insights:\n\n# Automatically add missing fields\npython3 skills/obsidian-ontology-sync/scripts/sync.py apply-feedback\n\n# What it does:\n# - Adds missing email field to contact notes\n# - Creates suggested project files\n# - Links related entities\n# - Updates frontmatter\n\nSafety: Always creates backup before modifying files."
      },
      {
        "title": "Comparison with Alternatives",
        "body": "ApproachProsConsManual ontologyFull controlToo much work, falls behindObsidian onlySimpleNo structured queriesOntology onlyPowerful queriesNot human-friendlyThis skillBest of bothInitial setup needed"
      },
      {
        "title": "1. Install Dependencies",
        "body": "# Already have ontology skill installed\nclawhub install obsidian  # If not already installed"
      },
      {
        "title": "2. Create Config",
        "body": "python3 skills/obsidian-ontology-sync/scripts/init.py\n\n# Creates:\n# - config.yaml with your vault path\n# - ontology directory structure\n# - cron jobs"
      },
      {
        "title": "3. Run First Sync",
        "body": "# Manual first sync to test\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract --dry-run\n\n# See what would be extracted\n# Review, then run for real:\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract"
      },
      {
        "title": "4. Enable Automatic Sync",
        "body": "python3 skills/obsidian-ontology-sync/scripts/setup-cron.py\n\n# Confirms cron jobs:\n# ✓ Sync every 3 hours\n# ✓ Daily analysis at 9 AM\n# ✓ Weekly feedback Monday 10 AM"
      },
      {
        "title": "5. Query Your Data",
        "body": "# Try some queries\npython3 skills/obsidian-ontology-sync/scripts/query.py \"team members on high value projects\""
      },
      {
        "title": "Extraction Issues",
        "body": "# Dry run to see what would be extracted\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract --dry-run --verbose\n\n# Check specific file\npython3 skills/obsidian-ontology-sync/scripts/debug.py \\\n  --file references/contacts/Alice.md"
      },
      {
        "title": "Query Not Finding Data",
        "body": "# Check what's in ontology\npython3 skills/ontology/scripts/ontology.py query --type Person\n\n# Verify sync ran\ncat /root/life/pkm/ontology-sync/logs/sync-latest.log"
      },
      {
        "title": "Feedback Not Generated",
        "body": "# Manually run analysis\npython3 skills/obsidian-ontology-sync/scripts/sync.py analyze\npython3 skills/obsidian-ontology-sync/scripts/sync.py feedback"
      },
      {
        "title": "Version History",
        "body": "1.0.0 (2026-02-27) - Initial version with extraction, analysis, feedback loop\n\nAuthor: Built for team management, contact tracking, and business intelligence at scale\nLicense: MIT\nTags: obsidian, ontology, knowledge-graph, pkm, automation, sync"
      }
    ],
    "body": "Obsidian-Ontology Sync\n\nPhilosophy: Obsidian is PRIMARY (human writes natural notes) → Ontology is DERIVED (machine extracts structure) → Feedback loop improves both\n\nCore Concept\nObsidian Notes (Markdown)\n    ↓ Extract (every 3 hours)\nOntology Graph (Structured)\n    ↓ Query & Analyze\nInsights & Suggestions\n    ↓ Feedback\nImproved Note Templates\n\nWhen to Use\nSituation\tAction\nAfter creating/updating contacts\tRun sync to extract entities\nBefore business queries\tSync then query ontology\nWeekly review\tSync + analyze + get suggestions\nNew project setup\tExtract entities + suggest structure\nTeam status tracking\tSync daily-status → ontology → analytics\nWhat Gets Extracted\nFrom Contact Notes (references/contacts/*.md)\n\nExtracts:\n\nPerson entity (name, email, phone)\nworks_at → Organization\nmet_at → Event\nassigned_to → Project (if mentioned)\nstatus → (prospect, warm_lead, client, etc.)\n\nExample:\n\n# Alice Johnson\n\n**Email:** alice@company.com\n**Company:** Acme Corp\n**Met At:** Tech Conference 2026\n**Projects:** Project Alpha\n\n## Notes\nGreat developer, responsive communication.\n\n\nBecomes:\n\n{\n  \"entity\": {\n    \"id\": \"person_alice_johnson\",\n    \"type\": \"Person\",\n    \"properties\": {\n      \"name\": \"Alice Johnson\",\n      \"email\": \"alice@company.com\",\n      \"notes\": \"Great developer, responsive communication\"\n    }\n  },\n  \"relations\": [\n    {\"from\": \"person_alice_johnson\", \"rel\": \"works_at\", \"to\": \"org_acme\"},\n    {\"from\": \"person_alice_johnson\", \"rel\": \"met_at\", \"to\": \"event_tech_conference_2026\"},\n    {\"from\": \"person_alice_johnson\", \"rel\": \"assigned_to\", \"to\": \"project_alpha\"}\n  ]\n}\n\nFrom Client Notes (references/clients/*.md)\n\nExtracts:\n\nOrganization entity\nhas_contract_value → number\nprojects → Project entities\nprimary_contact → Person\nFrom Team Notes (references/team/*.md)\n\nExtracts:\n\nPerson entity\nworks_for → Organization\nassigned_to → Project[]\nreports_to → Person\nresponse_pattern → (proactive, reactive, non-responsive)\nFrom Daily Status (daily-status/YYYY-MM-DD/*.md)\n\nExtracts:\n\nresponse_time property on Person\nstatus_update → Event\nblockers → Issue entities\nbehavioral_pattern tracking\nFrom Project Notes (projects/*.md)\n\nExtracts:\n\nProject entity\nfor_client → Organization\nteam → Person[]\nstatus, value, deadline\nSync Process\n1. Extract Phase (Markdown → Ontology)\n# Run extraction\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract\n\n# What it does:\n# 1. Scan configured Obsidian directories\n# 2. Parse markdown frontmatter + content\n# 3. Extract entities (Person, Project, Organization, etc.)\n# 4. Extract relationships (works_at, assigned_to, etc.)\n# 5. Write to ontology using append-only operations\n\n\nDetection Rules:\n\n# Contact files\nif file.startswith(\"references/contacts/\"):\n    entity_type = \"Person\"\n    extract_email_from_content()\n    extract_company_from_property(\"Company:\")\n    extract_projects_from_links([[Project]])\n    \n# Client files\nif file.startswith(\"references/clients/\"):\n    entity_type = \"Organization\"\n    extract_contract_value()\n    extract_projects()\n    \n# Team files\nif file.startswith(\"references/team/\"):\n    entity_type = \"Person\"\n    role = \"team_member\"\n    extract_assignments()\n    extract_response_patterns()\n\n2. Analysis Phase (Ontology → Insights)\n# Run analytics\npython3 skills/obsidian-ontology-sync/scripts/sync.py analyze\n\n# Generates insights like:\n# - \"3 team members have no assigned projects\"\n# - \"Contact 'John Doe' missing email address\"\n# - \"Project 'X' has 5 people but no client linked\"\n# - \"10 contacts from AI Summit not linked to follow-up tasks\"\n\n3. Feedback Phase (Insights → Improve PKM)\n# Get suggestions\npython3 skills/obsidian-ontology-sync/scripts/sync.py feedback\n\n# Creates:\n# - Missing property suggestions\n# - Broken link reports\n# - Relationship suggestions\n# - Template improvements\n\n\nExample Feedback:\n\n# Sync Feedback - 2026-02-27\n\n## Missing Information (10 items)\n- [ ] `Alice Johnson` missing phone number\n- [ ] `Bob` missing email in team file\n- [ ] Project `Project Alpha` missing deadline\n\n## Suggested Links (5 items)\n- [ ] Link `Jane Doe` (TechHub) to organization `TechHub`\n- [ ] Link `Eve` to project (found in daily-status but not in team file)\n\n## Relationship Insights\n- `Project Alpha` team: Alice, Carol, David (extracted from daily-status)\n- Suggest updating project file with team assignments\n\n## Template Suggestions\n- Add `Projects: [[]]` field to contact template\n- Add `Response Pattern:` field to team template\n\nConfiguration\nconfig.yaml\n# /root/life/pkm/ontology-sync/config.yaml\n\nobsidian:\n  vault_path: /root/life/pkm\n  \n  # What to sync\n  sources:\n    contacts:\n      path: references/contacts\n      entity_type: Person\n      extract:\n        - email_from_content\n        - company_from_property\n        - projects_from_links\n    \n    clients:\n      path: references/clients\n      entity_type: Organization\n      extract:\n        - contract_value\n        - projects\n        - contacts\n    \n    team:\n      path: references/team\n      entity_type: Person\n      role: team_member\n      extract:\n        - assignments\n        - response_patterns\n        - reports_to\n    \n    daily_status:\n      path: daily-status\n      extract:\n        - response_times\n        - behavioral_patterns\n        - blockers\n\nontology:\n  storage_path: /root/life/pkm/memory/ontology\n  format: jsonl  # or sqlite for scale\n  \n  # Entity types to track\n  entities:\n    - Person\n    - Organization\n    - Project\n    - Event\n    - Task\n  \n  # Relationships to extract\n  relationships:\n    - works_at\n    - assigned_to\n    - met_at\n    - for_client\n    - reports_to\n    - has_task\n    - blocks\n\nfeedback:\n  output_path: /root/life/pkm/ontology-sync/feedback\n  generate_reports: true\n  suggest_templates: true\n  highlight_missing: true\n\nschedule:\n  # Run via cron every 3 hours\n  sync_interval: \"0 */3 * * *\"\n  analyze_daily: \"0 9 * * *\"  # 9 AM daily\n  feedback_weekly: \"0 10 * * MON\"  # Monday 10 AM\n\nScheduled Sync (Cron Integration)\nSetup Automatic Sync\n# Add to OpenClaw cron\npython3 skills/obsidian-ontology-sync/scripts/setup-cron.py\n\n# Or manually via cron tool\ncron add \\\n  --schedule \"0 */3 * * *\" \\\n  --task \"python3 skills/obsidian-ontology-sync/scripts/sync.py extract\" \\\n  --label \"Obsidian → Ontology Sync\"\n\n\nCron Jobs Created:\n\nEvery 3 hours: Extract entities from Obsidian → Update ontology\nDaily 9 AM: Run analytics and generate insights\nWeekly Monday 10 AM: Generate feedback report + template suggestions\nQueries (Using Ontology)\n\nOnce synced, you can query:\n\n# All team members on high-value projects\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Person \\\n  --where '{\"role\":\"team_member\"}' \\\n  --related assigned_to \\\n  --filter '{\"type\":\"Project\",\"value__gt\":400000}'\n\n# Contacts from specific event not yet followed up\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Person \\\n  --where '{\"met_at\":\"event_tech_conference_2026\"}' \\\n  --missing has_task\n\n# Team response patterns\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Person \\\n  --where '{\"role\":\"team_member\"}' \\\n  --aggregate response_pattern\n\n# Projects by client\npython3 skills/ontology/scripts/ontology.py query \\\n  --type Project \\\n  --group-by for_client \\\n  --count\n\nFeedback Loop Examples\nExample 1: Missing Email Detection\n\nOntology finds: Person entity with no email property\n\nFeedback generated:\n\n## Missing Contact Information\n\nThe following team members are missing email addresses:\n\n- [ ] Bob (`references/team/Bob.md`)\n- [ ] Lucky (`references/team/Lucky.md`)\n\n**Suggestion:** Add email field to team member template:\n\\`\\`\\`markdown\n**Email:** \n\\`\\`\\`\n\nExample 2: Broken Project Links\n\nOntology finds: Person assigned_to Project that doesn't exist\n\nFeedback generated:\n\n## Broken Project References\n\nFound references to projects that don't have dedicated files:\n\n- [ ] \"Project Epsilon\" mentioned in team files but no `projects/Project Epsilon.md`\n- [ ] \"Project Delta Tata DT\" assigned but no project file\n\n**Suggestion:** Create project files with template\n\nExample 3: Relationship Discovery\n\nOntology finds: Multiple people working at same company\n\nFeedback generated:\n\n## Suggested Company Grouping\n\nFound 3 contacts at \"TechHub\":\n- Jane Doe\n- [2 others from daily-status mentions]\n\n**Suggestion:** Create `references/clients/TechHub.md` and link contacts\n\nIntegration with Daily Workflow\nMorning Routine (9 AM)\n# Cron runs analysis\n# Generates daily-insights.md with:\n- Response rate from yesterday's status requests\n- Projects needing attention (blockers mentioned)\n- Contacts to follow up (met > 3 days ago, no task)\n\nWeekly Review (Monday 10 AM)\n# Cron generates weekly feedback\n# Creates suggestions for:\n- Missing information to fill in\n- Broken links to fix\n- New templates to adopt\n- Relationship insights\n\nOn-Demand Queries\n# Before a meeting\n\"Show me all interactions with Client X\"\n\n# Resource planning\n\"Which team members are on <3 projects?\"\n\n# Sales pipeline\n\"Contacts met at conferences in last 30 days without follow-up\"\n\nBenefits\n✅ For You\nZero Extra Work: Just keep writing normal Obsidian notes\nAutomatic Structure: Ontology extracted automatically\nPowerful Queries: Find patterns across all your data\nQuality Improvement: Feedback loop catches missing info\nNo Double Entry: Single source of truth (Obsidian)\n✅ For Team Management\nTrack who's on which project (auto-extracted)\nMonitor response patterns (from daily-status)\nIdentify unbalanced workloads\nFind blockers across projects\n✅ For Sales/BD\nTrack contact network (who you met, where, when)\nFollow-up reminders (contacted >7 days ago)\nRelationship mapping (who knows who)\nPipeline insights (prospects → warm → clients)\n✅ For Finance\nProject valuations (extracted from client notes)\nTeam cost allocation (people → projects → revenue)\nRevenue forecasting (active projects × value)\nFile Structure After Sync\n/root/life/pkm/\n├── references/\n│   ├── contacts/          # Source notes (you write these)\n│   ├── clients/           # Source notes\n│   └── team/              # Source notes\n├── daily-status/          # Source notes\n├── projects/              # Source notes\n│\n├── memory/ontology/       # Generated ontology\n│   ├── graph.jsonl        # Entity/relation storage\n│   └── schema.yaml        # Type definitions\n│\n└── ontology-sync/         # Sync outputs\n    ├── config.yaml        # Your config\n    ├── feedback/\n    │   ├── daily-insights.md\n    │   ├── weekly-feedback.md\n    │   └── suggestions.md\n    └── logs/\n        └── sync-YYYY-MM-DD.log\n\nAdvanced: Bidirectional Sync\n\nFuture capability:\n\nUpdate Obsidian notes FROM ontology insights:\n\n# Automatically add missing fields\npython3 skills/obsidian-ontology-sync/scripts/sync.py apply-feedback\n\n# What it does:\n# - Adds missing email field to contact notes\n# - Creates suggested project files\n# - Links related entities\n# - Updates frontmatter\n\n\nSafety: Always creates backup before modifying files.\n\nComparison with Alternatives\nApproach\tPros\tCons\nManual ontology\tFull control\tToo much work, falls behind\nObsidian only\tSimple\tNo structured queries\nOntology only\tPowerful queries\tNot human-friendly\nThis skill\tBest of both\tInitial setup needed\nGetting Started\n1. Install Dependencies\n# Already have ontology skill installed\nclawhub install obsidian  # If not already installed\n\n2. Create Config\npython3 skills/obsidian-ontology-sync/scripts/init.py\n\n# Creates:\n# - config.yaml with your vault path\n# - ontology directory structure\n# - cron jobs\n\n3. Run First Sync\n# Manual first sync to test\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract --dry-run\n\n# See what would be extracted\n# Review, then run for real:\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract\n\n4. Enable Automatic Sync\npython3 skills/obsidian-ontology-sync/scripts/setup-cron.py\n\n# Confirms cron jobs:\n# ✓ Sync every 3 hours\n# ✓ Daily analysis at 9 AM\n# ✓ Weekly feedback Monday 10 AM\n\n5. Query Your Data\n# Try some queries\npython3 skills/obsidian-ontology-sync/scripts/query.py \"team members on high value projects\"\n\nTroubleshooting\nExtraction Issues\n# Dry run to see what would be extracted\npython3 skills/obsidian-ontology-sync/scripts/sync.py extract --dry-run --verbose\n\n# Check specific file\npython3 skills/obsidian-ontology-sync/scripts/debug.py \\\n  --file references/contacts/Alice.md\n\nQuery Not Finding Data\n# Check what's in ontology\npython3 skills/ontology/scripts/ontology.py query --type Person\n\n# Verify sync ran\ncat /root/life/pkm/ontology-sync/logs/sync-latest.log\n\nFeedback Not Generated\n# Manually run analysis\npython3 skills/obsidian-ontology-sync/scripts/sync.py analyze\npython3 skills/obsidian-ontology-sync/scripts/sync.py feedback\n\nVersion History\n1.0.0 (2026-02-27) - Initial version with extraction, analysis, feedback loop\n\nAuthor: Built for team management, contact tracking, and business intelligence at scale License: MIT Tags: obsidian, ontology, knowledge-graph, pkm, automation, sync"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/parthpandya1729/obsidian-ontology-sync",
    "publisherUrl": "https://clawhub.ai/parthpandya1729/obsidian-ontology-sync",
    "owner": "parthpandya1729",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync",
    "downloadUrl": "https://openagent3.xyz/downloads/obsidian-ontology-sync",
    "agentUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync/agent",
    "manifestUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/obsidian-ontology-sync/agent.md"
  }
}