glyph-miO 2.3
unlistedby Floke Studio
Metadata Intelligence for Obsidian — tags, summaries, note metadata (offline + optional Ollama).
glyph-miO 2.8.0
Metadata Intelligence for Obsidian
Summaries · tag suggestions · offline-first analysis
glyph-mi core · Site · README.ru · glyph-sO · glyph-mi
User section
What is glyph-miO?
glyph-miO is an Obsidian community plugin that analyzes the active note and helps you organize knowledge faster:
- Extractive summaries — a compact callout block inserted at the end of the note
- Tag suggestions — ranked by relevance to title, headings, and body, with scores/tooltips
- Offline by default — no cloud, no API keys; optional local Ollama enhancement
It pairs naturally with glyph-sO: search finds notes across the vault; glyph-miO understands the note you’re working on right now. Long-term UI chrome aims to share a glyph-ui styling kit with sO.
What’s new in 2.8.0
- Sidebar panel — MI panel docks in the right rail (
ItemView); setpanelMode: modalfor the legacy centered modal - Vault batch analysis — command Glyph: analyze vault reports untagged notes and tag suggestions
- Frontmatter tags — setting Tag write mode:
inline(default) orfrontmatter(YAMLtagsmerge) - Summary history — last 10 summary applies stored; Glyph: rollback last summary restores the previous file body
- Vault tag frequency — tag chip tooltips show how many notes in the vault use each tag
- Services —
panel-view,frontmatter,vault-cache,batch-analyze,summary-history+ vitest coverage
What’s new in 2.7.3
- Theme-safe UI — CSS uses Obsidian variables only (no hardcoded hex fallbacks)
- 2.8.0 follow-ups — sidebar panel, batch vault analysis, frontmatter tags, glyph-mi notes vendor
What’s new in 2.7.2
replace-latestno longer stacks---— replacing a summary strips the previous horizontal rule before the marker, so repeated Insert summary does not accumulate separators at the end of the note- Tag scoring already weights note title highest (
+16vs headings+10); docs matchservices/metadata.js
What’s new in 2.7.1
- Safer metadata cache key — always includes vault path plus mtime, size, and a short content hash (documented in
services/metadata.js) - Summary mode
none/off— preview in the MI panel only; write when you Insert / run summarize explicitly - Ollama timeout setting — configurable seconds (default 12), used for generate calls
- Tag explainability — relevance % on chips + tooltip (title / heading / body / frontmatter)
- Ollama status — status bar + panel pill (online / offline fallback / disabled)
- Optional diff preview — Apply / Cancel modal before insert or replace
- RU labels — commands and settings follow Obsidian language when set to Russian
- Adapter stub —
services/glyph-mi-notes-adapter.jsready to consume glyph-minoteswithout breaking the local offline path
What’s in 2.7
Service-based architecture — core logic in focused modules:
| Service | Responsibility |
|---|---|
services/panel-view.js | Sidebar ItemView + shared panel UI mount |
services/frontmatter.js | Inline vs YAML tag writes (processFrontMatter) |
services/vault-cache.js | Background vault index (tags, title, word count) |
services/batch-analyze.js | Vault-wide untagged scan + suggestions |
services/summary-history.js | Last 10 summary applies + rollback |
services/metadata.js | Weighted tag scoring, stop-words, cache key |
services/summary.js | Sentence extraction, block formatting, lifecycle modes |
services/i18n.js | EN/RU strings for commands and settings |
services/glyph-mi-notes-adapter.js | Local analyzeNote (glyph-mi notes stub) |
Weighted metadata scoring — tags ranked by:
- Matches in the note title (highest weight)
- Frequency in headings
- Density in body paragraphs
- Existing frontmatter tags (boost)
Summary lifecycle modes:
| Mode | Behavior |
|---|---|
append | Each summarize/insert adds a new <!-- glyph-miO-summary --> block |
replace-latest | Updates the most recent summary block in place (default) |
none / off | Do not auto-write; show draft in the panel; insert only via Insert / summarize command |
Install
- Download the latest release from Releases (or clone
main). - Extract into your vault:
.obsidian/plugins/glyph-mi-o/
├── manifest.json
├── main.js
├── styles.css
└── services/
├── metadata.js
├── summary.js
├── i18n.js
├── panel-view.js
├── frontmatter.js
├── vault-cache.js
├── batch-analyze.js
├── summary-history.js
└── glyph-mi-notes-adapter.js
- Enable glyph-miO in Settings → Community plugins.
Commands
| Command (EN) | Command (RU) | What it does |
|---|---|---|
| Glyph: open MI panel | Glyph: открыть панель MI | Open sidebar MI panel (or modal if panelMode: modal) |
| Glyph: analyze vault | Glyph: анализ vault | Scan vault for untagged notes and suggestions |
| Glyph: rollback last summary | Glyph: откатить последний пересказ | Restore note body from summary history |
| Glyph: summarize note | Glyph: пересказ заметки | Insert or update the summary block (respects mode + diff preview) |
| Glyph: jump to MI summary | Glyph: перейти к саммари MI | Cursor jumps to the summary marker |
| Glyph: analyze active note | Glyph: анализ активной заметки | Run analysis without opening the panel |
| Glyph: suggest tags | Glyph: предложить теги | Show top-ranked tags with relevance % |
Settings
| Setting | Description |
|---|---|
| Enable Ollama | Try local LLM for JSON-structured summaries (default: on) |
| Ollama URL | Base URL, default http://127.0.0.1:11434 |
| Model | Ollama model name, default llama3.2 |
| Ollama timeout (seconds) | Abort generation after N seconds (default 12), then offline fallback |
| Summary block mode | append, replace-latest, none, or off |
| Diff preview before Apply | Show before/after modal (Apply / Cancel) before writing |
| Tag write mode | inline (#tags in body / summary block) or frontmatter (YAML tags) |
| Panel mode | sidebar (default) or modal (legacy centered panel) |
How analysis works
- Offline path (always available): tokenize → score tags with reasons → pick key sentences → format marked block.
- Ollama path (optional): if Ollama responds within the configured timeout, request JSON summary + tags. On failure or timeout, fall back to the offline algorithm.
Architecture note (local vs glyph-mi)
MI analysis uses services/glyph-mi-notes-adapter.js, which prefers the vendored vendor/glyph-mi-notes.cjs pipeline from glyph-mi and falls back to local services/* when needed. Shared glyph-ui styling with glyph-sO remains a parallel goal.
Example summary block
---
<!-- glyph-miO-summary -->
> [!summary] Glyph MI-O
> This note covers project planning for Q3, including milestone
> definitions and resource allocation across three teams.
#projects #planning #q3
GitHub / Dev section
Architecture (2.8.0)
main.js # Plugin UI, Ollama client, commands, status bar
services/panel-view.js # ItemView sidebar + mountGlyphMiOPanel
services/frontmatter.js # applyTagsToFrontmatter
services/vault-cache.js # VaultCache index + debounced rebuild
services/batch-analyze.js # analyzeVault
services/summary-history.js # pushHistory / rollbackLast
services/metadata.js # computeMetadataCached, cache key, tagDetails
services/summary.js # extractiveSummary, buildSummaryBlock, none/off
services/i18n.js # EN/RU labels
services/glyph-mi-notes-adapter.js # local analyzeNote
styles.css # panel, sidebar view, status, diff modal
Metadata cache key
keyForDoc(file, body) is always:
${path}|${mtime}|${size}|${contentHash}
Path is mandatory (collision-safe across notes). See JSDoc in services/metadata.js.
Ollama integration
- Health check:
GET /api/tags - Generation:
POST /api/generatewithformat: "json" - Timeout: settings Ollama timeout (seconds) (default 12)
- Status: status bar item + MI panel pill
- Graceful fallback to
extractiveSummary()on any failure
Related repositories
| Repo | Role |
|---|---|
| glyph-mi | Universal MI core (Senza, Cultiva, future notes) |
| glyph-sO | Full-text search for Obsidian |
| glyph-s | Shared search engine |
License
GPL-3.0 · Floke Studio
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.