From 7bf147069eb6c820d45d74021ae0fb74e470beaf Mon Sep 17 00:00:00 2001 From: Kunthawat Greethong Date: Thu, 2 Jul 2026 10:04:21 +0700 Subject: [PATCH] Add OrbitOS skills (bundled) - orbites-research: deep research workflow - orbites-parse-knowledge: structure unstructured text - orbites-obsidian-markdown: Obsidian markdown reference - obsidian: vault read/write/search - Updated README: 20 skills total, OrbitOS bundled --- README.md | 14 +-- skills/orbitos/obsidian/SKILL.md | 61 ++++++++++ .../orbites-obsidian-markdown/SKILL.md | 61 ++++++++++ .../orbitos/orbites-parse-knowledge/SKILL.md | 55 +++++++++ skills/orbitos/orbites-research/SKILL.md | 109 ++++++++++++++++++ 5 files changed, 293 insertions(+), 7 deletions(-) create mode 100644 skills/orbitos/obsidian/SKILL.md create mode 100644 skills/orbitos/orbites-obsidian-markdown/SKILL.md create mode 100644 skills/orbitos/orbites-parse-knowledge/SKILL.md create mode 100644 skills/orbitos/orbites-research/SKILL.md diff --git a/README.md b/README.md index fd4d9ef..c752e0c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Content pipeline and marketing automation system for moreminimore-service client Data Stage → Content Stage → Publish Article → Social Stage → Publish Social → Analytics ``` -### Skills (16 total) +### Skills (20 total) **Core pipeline (mm*):** - `mm-content-orchestrator` — top-level pipeline coordinator @@ -29,13 +29,13 @@ Data Stage → Content Stage → Publish Article → Social Stage → Publish So - `graphic-designer` — graphics - `xurl` — X/Twitter API -**External (OrbitOS — install separately):** -- `obsidian` — vault read/write -- `orbites-research` — deep research -- `orbites-parse-knowledge` — structure text -- `orbites-obsidian-markdown` — markdown reference +**OrbitOS (bundled in `skills/orbitos/`):** +- `obsidian` — vault read/write/search +- `orbites-research` — deep research workflow +- `orbites-parse-knowledge` — structure unstructured text +- `orbites-obsidian-markdown` — Obsidian markdown reference -See `references/orbitos-skills.md` for OrbitOS integration details. +See `references/orbitos-skills.md` for detailed usage. ### Scripts diff --git a/skills/orbitos/obsidian/SKILL.md b/skills/orbitos/obsidian/SKILL.md new file mode 100644 index 0000000..e3a9872 --- /dev/null +++ b/skills/orbitos/obsidian/SKILL.md @@ -0,0 +1,61 @@ +--- +name: obsidian +description: Read, search, create, and edit notes in the Obsidian vault. +platforms: [linux, macos, windows] +--- + +# Obsidian Vault + +Use this skill for filesystem-first Obsidian vault work: reading notes, listing notes, searching note files, creating notes, appending content, and adding wikilinks. + +## Vault path + +Use a known or resolved vault path before calling file tools. + +The documented vault-path convention is the `OBSIDIAN_VAULT_PATH` environment variable, for example from `${HERMES_HOME:-~/.hermes}/.env`. If it is unset, use `~/Documents/Obsidian Vault`. + +File tools do not expand shell variables. Do not pass paths containing `$OBSIDIAN_VAULT_PATH` to `read_file`, `write_file`, `patch`, or `search_files`; resolve the vault path first and pass a concrete absolute path. Vault paths may contain spaces, which is another reason to prefer file tools over shell commands. + +If the vault path is unknown, `terminal` is acceptable for resolving `OBSIDIAN_VAULT_PATH` or checking whether the fallback path exists. Once the path is known, switch back to file tools. + +## Read a note + +Use `read_file` with the resolved absolute path to the note. Prefer this over `cat` because it provides line numbers and pagination. + +## List notes + +Use `search_files` with `target: "files"` and the resolved vault path. Prefer this over `find` or `ls`. + +- To list all markdown notes, use `pattern: "*.md"` under the vault path. +- To list a subfolder, search under that subfolder's absolute path. + +## Search + +Use `search_files` for both filename and content searches. Prefer this over `grep`, `find`, or `ls`. + +- For filenames, use `search_files` with `target: "files"` and a filename `pattern`. +- For note contents, use `search_files` with `target: "content"`, the content regex as `pattern`, and `file_glob: "*.md"` when you want to restrict matches to markdown notes. + +## Create a note + +Use `write_file` with the resolved absolute path and the full markdown content. Prefer this over shell heredocs or `echo` because it avoids shell quoting issues and returns structured results. + +## Append to a note + +Prefer a native file-tool workflow when it is not awkward: + +- Read the target note with `read_file`. +- Use `patch` for an anchored append when there is stable context, such as adding a section after an existing heading or appending before a known trailing block. +- Use `write_file` when rewriting the whole note is clearer than constructing a fragile patch. + +For an anchored append with `patch`, replace the anchor with the anchor plus the new content. + +For a simple append with no stable context, `terminal` is acceptable if it is the clearest safe option. + +## Targeted edits + +Use `patch` for focused note changes when the current content gives you stable context. Prefer this over shell text rewriting. + +## Wikilinks + +Obsidian links notes with `[[Note Name]]` syntax. When creating notes, use these to link related content. diff --git a/skills/orbitos/orbites-obsidian-markdown/SKILL.md b/skills/orbitos/orbites-obsidian-markdown/SKILL.md new file mode 100644 index 0000000..eddb1a0 --- /dev/null +++ b/skills/orbitos/orbites-obsidian-markdown/SKILL.md @@ -0,0 +1,61 @@ +--- +name: orbites-obsidian-markdown +description: Obsidian Flavored Markdown reference — wikilinks, callouts, embeds, frontmatter, mermaid. Use when working with Obsidian vault files or user asks about wikilinks/callouts/embeds. +--- +# OrbitOS: Obsidian Markdown Reference + +Obsidian uses CommonMark + GitHub Flavored Markdown + Obsidian extensions (wikilinks, callouts, embeds). + +## Internal Links (Wikilinks) + +```markdown +[[Note Name]] +[[Note Name|Display Text]] +[[Note Name#Heading]] +[[Note Name#^block-id]] +![[Note Name]] # Embed entire note +![[Note Name#Section]] # Embed section +``` + +## Callouts + +```markdown +> [!note] / [!info] / [!tip] / [!warning] / [!danger] +> [!faq]- Collapsed by default +> [!faq]+ Expanded by default +``` + +## Properties (Frontmatter) + +```yaml +--- +title: My Note +date: 2024-01-15 +tags: [project, important] +aliases: [My Note, Alt Name] +status: in-progress +due: 2024-02-01T14:30:00 +--- +``` + +## Embeds + +```markdown +![[image.png|300]] # Image with width +![[audio.mp3]] # Audio +![[document.pdf#page=3]] # PDF +``` + +## Other + +- **Highlight**: `==text==` +- **Comments**: `%%hidden text%%` +- **Math**: `$e^{i\pi} + 1 = 0$` +- **Mermaid**: ```` ```mermaid ```` ```` + +## Critical DO NOT + +- **No empty line after frontmatter** `---` (becomes visible in body) +- Frontmatter MUST be at line 1 +- **NO duplicate keys** in frontmatter +- Use array syntax for tags: `tags: [tag1, tag2]` diff --git a/skills/orbitos/orbites-parse-knowledge/SKILL.md b/skills/orbitos/orbites-parse-knowledge/SKILL.md new file mode 100644 index 0000000..7264565 --- /dev/null +++ b/skills/orbitos/orbites-parse-knowledge/SKILL.md @@ -0,0 +1,55 @@ +--- +name: orbites-parse-knowledge +description: Take unstructured text and parse it into structured OrbitOS vault content — research notes + wiki concepts. Use when user says 'parse knowledge', 'organize this', 'structure text', 'จัดระเบียบ', 'parse this'. +--- +# OrbitOS: Parse Knowledge — Structure Unstructured Text + +You are a Vault Agent that ingests unstructured text and organizes it into the OrbitOS vault. + +## Workflow + +### 1. ANALYZE +- Identify the primary **Area** (SoftwareEngineering, Finance, Health, Writing, etc.) +- Create a slug for the main **Topic** (e.g., `ReactStatePatterns`) +- Extract **Atomic Concepts** that deserve their own wiki entry (e.g., `Redux`, `ContextAPI`) + +### 2. GENERATE FILES + +#### A. Main Research Note +- Path: `30_Research///.md` +- Frontmatter: + ```yaml + --- + created: YYYY-MM-DD + type: reference + area: "[[Area]]" + tags: [status/refactored] + --- + ``` +- Content: Modular rewrite of the input text +- Replace specific terms with wikilinks `[[ConceptName]]` + +#### B. Atomic Wiki Notes +- Path: `40_Wiki//.md` +- Frontmatter: + ```yaml + --- + area: + tags: [] + created: YYYY-MM-DD + --- + ``` +- Content: A concise, timeless definition of the concept +- Use format: + ```markdown + # [Concept Name] + + ## Definition + [Clear definition] + + ## Key Points + - [Main characteristic] + + ## Related Concepts + - [[Related Concept 1]] + ``` diff --git a/skills/orbitos/orbites-research/SKILL.md b/skills/orbitos/orbites-research/SKILL.md new file mode 100644 index 0000000..fe2d1d3 --- /dev/null +++ b/skills/orbitos/orbites-research/SKILL.md @@ -0,0 +1,109 @@ +--- +name: orbites-research +description: Deep research workflow for OrbitOS — investigate a topic, create main research note, extract atomic wiki concepts. Use when user says 'research [topic]', 'deep dive', 'study', 'เรียนรู้', 'วิจัย'. +--- +# OrbitOS: Research — Deep Dive + +You are the Research Coordinator for OrbitOS. Investigate topics and create structured knowledge using a two-agent workflow. + +## Input + +The user provides: +- A topic (e.g., "React Server Components", "Consistent Hashing") +- Optional: Specific questions or goals +- Optional: Related project context + +## Phase 1: Plan (Delegate to Subagent) + +Spawn planning subagent: + +```python +context = f""" +Create research plan for: [topic + user context] + +1. Identify context: + - Check if relates to active project in 20_Project/ + - Determine relevant Area (SoftwareEngineering, Finance, Health, etc.) + - Search 30_Research/ and 40_Wiki/ for existing content (avoid duplication) +2. Scan 99_System/Prompts/ for relevant expertise persona +3. Create plan at 90_Plans/Plan_YYYY-MM-DD_Research_.md: + +# Research Plan: [Topic] + +## Research Objective +[What user will understand] + +## Context Found +- Related Area: [Area] +- Existing notes: [list or 'None found'] +- Related project: [project or N/A] + +## Research Strategy +[ ] Find official docs +[ ] Find practical examples +[ ] Identify key concepts for Wiki +[ ] Find common pitfalls + +## Output Structure +- Main note: 30_Research///.md +- Atomic concepts: 40_Wiki//.md +- Examples: 30_Research///examples/ (if needed) + +4. Return the plan file path. +""" +delegate_task(goal="Create research plan", context=context, toolsets=["web", "file"]) +``` + +After planning agent returns, ask user: "Research plan at `[path]`. Review and confirm?" + +## Phase 2: Execute (After User Confirmation) + +Spawn execution subagent: + +```python +context = f""" +Execute research plan at: 90_Plans/Plan_YYYY-MM-DD_Research_.md + +1. Read the plan file +2. Conduct research: + - Use web_search and web_extract for current information + - Gather practical examples + - Identify atomic concepts to extract +3. Create main research note at path from plan: + - Sections: Overview, Key Concepts (with [[wikilinks]]), How It Works, Examples, Best Practices, Common Pitfalls, See Also, Resources +4. Create atomic wiki notes: 40_Wiki//.md + - Keep concise (1-3 paragraphs) + - Include 'See Also' section +5. Create examples folder: 30_Research///examples/ if needed +6. Link in today's daily note: 10_Daily/YYYY-MM-DD.md +7. Archive plan to 90_Plans/Archives/ + +Main research frontmatter: +--- +type: reference +created: YYYY-MM-DD +area: "[[AreaName]]" +tags: [research, topic-tags] +status: complete +--- + +Wiki note frontmatter: +--- +area: +tags: [] +created: YYYY-MM-DD +--- +""" +delegate_task(goal="Execute research plan", context=context, toolsets=["web", "terminal", "file"]) +``` + +Report back with: +- **Created:** main note, wiki concepts, examples +- **Key Takeaways:** 3 main insights +- **Next Steps:** suggested follow-ups + +## Edge Cases + +- **Topic too broad:** Break into sub-topics +- **Topic already exists:** Update existing note, don't duplicate +- **Hands-on topic:** Ensure examples/ folder with working code