@theglitchking/semantic-pages 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Official marketplace for semantic-pages - Semantic search + knowledge graph MCP server with auto-wiring for .claude/.vault and hit-em-with-the-docs companion",
|
|
9
|
-
"version": "0.6.
|
|
9
|
+
"version": "0.6.1"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "semantic-pages",
|
|
14
14
|
"description": "Semantic search + knowledge graph MCP server for markdown vaults. Auto-wires a read/write vault at .claude/.vault, and a read-only docs index at .documentation when hit-em-with-the-docs is also installed.",
|
|
15
|
-
"version": "0.6.
|
|
15
|
+
"version": "0.6.1",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "TheGlitchKing"
|
|
18
18
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semantic-pages",
|
|
3
3
|
"description": "Semantic search + knowledge graph MCP server for markdown vaults. Auto-wires a read/write vault at .claude/.vault, and a read-only docs index at .documentation when hit-em-with-the-docs is also installed.",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "TheGlitchKing",
|
|
7
7
|
"email": "theglitchking@users.noreply.github.com"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theglitchking/semantic-pages",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Semantic search + knowledge graph MCP server for markdown vaults. Claude Code plugin with auto-wiring for .claude/.vault and read-only .documentation companion when hit-em-with-the-docs is installed.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/core/index.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"dist",
|
|
18
18
|
".claude-plugin",
|
|
19
19
|
"hooks",
|
|
20
|
+
"skills/semantic-first",
|
|
20
21
|
"README.md",
|
|
21
22
|
"LICENSE"
|
|
22
23
|
],
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: semantic-first
|
|
3
|
+
description: Route documentation lookups, internal procedure questions, repo architectural/vocabulary/convention questions, and research tasks through the semantic-pages and semantic-vault MCP servers BEFORE falling back to any other search strategy. Use this skill whenever the user asks how something works in this repo, what the convention is, where a procedure or guide lives, what the project calls something, why code is structured a certain way, OR asks any research question — comparative evaluations ("is there a better X"), tool/library/API recommendations ("what's the best X for Y"), best-of surveys, or any "look into X" / "research X" / "investigate X" phrasing. Also use for all research note-taking — findings go into .claude/.vault as markdown with structured frontmatter, not scattered across the conversation. Triggers on prose/conceptual questions about a codebase or domain, not on pure code-symbol lookups (those are Grep jobs). Ships with the semantic-pages plugin and probes MCP availability at runtime — the docs-lookup flow degrades gracefully when hit-em-with-the-docs is not installed, and the vault-research flow degrades gracefully when semantic-pages itself isn't wired up.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# semantic-first
|
|
7
|
+
|
|
8
|
+
Route documentation and research through the semantic-pages ecosystem before anything else.
|
|
9
|
+
|
|
10
|
+
## Why this skill exists
|
|
11
|
+
|
|
12
|
+
The semantic-pages plugin installs one or two MCP servers depending on what else is present:
|
|
13
|
+
|
|
14
|
+
- **`semantic-vault`** — semantic + keyword search and full read/write over `.claude/.vault/`, a research scratchpad that persists across sessions. Available whenever the semantic-pages plugin is installed.
|
|
15
|
+
- **`semantic-pages`** — the same engine pointed at a read-only docs index (by default `.documentation/`). Available only when the companion plugin `hit-em-with-the-docs` is also installed, since that's the plugin that owns the docs directory structure.
|
|
16
|
+
|
|
17
|
+
Without explicit routing, Claude's default reflex is to `Grep`/`Glob` the repo when the user asks a conceptual question, and to dump web-research findings straight into the chat where they're lost when the session ends. Both defaults waste the infrastructure the user set up. This skill corrects that.
|
|
18
|
+
|
|
19
|
+
## Two flows, gated independently
|
|
20
|
+
|
|
21
|
+
This skill has two flows, and they depend on different MCP servers. Probe each one independently — don't assume that if one works the other does, and don't no-op the whole skill just because half of it is unavailable.
|
|
22
|
+
|
|
23
|
+
| Flow | What it does | Depends on | Tool namespace |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| **A. Docs lookup** | Find how something works in this repo | `hit-em-with-the-docs` being installed | `mcp__semantic-pages__*` |
|
|
26
|
+
| **B. Research notes** | Capture findings to a persistent vault | `semantic-pages` being installed (which it is, since this skill ships with it — but the user can still have the MCP misconfigured) | `mcp__semantic-vault__*` |
|
|
27
|
+
|
|
28
|
+
## Flow A — documentation / procedure / repo-nuance lookups
|
|
29
|
+
|
|
30
|
+
**Triggers on prose questions about the current repo or project:**
|
|
31
|
+
|
|
32
|
+
- "How does this repo handle X?"
|
|
33
|
+
- "Where's the guide for Y?"
|
|
34
|
+
- "What's our process for Z?"
|
|
35
|
+
- "Why is this structured this way?"
|
|
36
|
+
- "What does this project call X?"
|
|
37
|
+
- "Is there a convention for Y?"
|
|
38
|
+
- "Is there a `<thing>` in this repo that does X?" — note this is **prose about whether a capability exists**, which semantic-pages answers well from design docs, even though a naive read would send it to Grep.
|
|
39
|
+
|
|
40
|
+
**Does NOT trigger on code-symbol lookups** like "where is function `parseAuth` defined" or "show me the `User` class" — those are `Grep`/`Glob` jobs. The line is *prose vs. symbol*: if the answer is a line or two of prose that would typically live in a design doc, README, or procedure, this flow applies. If the answer is a specific file path and line number that only exists in source code, it doesn't.
|
|
41
|
+
|
|
42
|
+
**When in doubt, try semantic-pages first anyway.** The cost of one extra `search_hybrid` call is tiny; the cost of grep-spelunking for something that's documented in plain English is several wasted minutes.
|
|
43
|
+
|
|
44
|
+
**Procedure:**
|
|
45
|
+
|
|
46
|
+
1. **Probe availability** once per task. Call `mcp__semantic-pages__get_stats` with no arguments. If the tool is not in the session, or `get_stats` errors, or the stats show an empty/missing index, drop to [Fallback: docs lookup](#fallback-docs-lookup) below. Otherwise the index is live and you can search it.
|
|
47
|
+
2. **Search with hybrid retrieval.** Use `mcp__semantic-pages__search_hybrid` with the user's question (or a condensed form of it) as the query. Hybrid search combines semantic embeddings with keyword matching and outperforms either individually for most real questions. Keep `top_k` modest (5–10); you can always widen if the first pass is thin.
|
|
48
|
+
3. **Read the top hits in full.** For each promising result, call `mcp__semantic-pages__read_note`. Do not answer from search snippets alone — snippets lose surrounding context and produce confident-sounding wrong answers. Reading 2–3 full notes is almost always cheaper than correcting a wrong answer later.
|
|
49
|
+
4. **Traverse the graph when the question is multi-part.** If a note references `[[wikilinks]]` or has `dependencies:` / `related:` frontmatter, use `mcp__semantic-pages__forwardlinks` / `backlinks` to follow the chain. This is especially valuable for questions like "how does X work end-to-end" or "what's the deploy process for each environment" — where the full answer is spread across linked notes.
|
|
50
|
+
5. **Answer from what you read, with filename citations.** Tell the user which notes you pulled the answer from so they can jump to the source. If the answer genuinely isn't in the index, say so explicitly — don't backfill with guesses or pivot silently to web search.
|
|
51
|
+
|
|
52
|
+
### Fallback: docs lookup
|
|
53
|
+
|
|
54
|
+
If step 1 indicates the `semantic-pages` MCP is unavailable (the `hit-em-with-the-docs` plugin isn't installed, the `.mcp.json` isn't wired up, or the index is empty), degrade:
|
|
55
|
+
|
|
56
|
+
- Tell the user, in one sentence, that the semantic docs index isn't available and you're falling back to direct file search. Visibility matters — it lets them fix the config and get the fast path back.
|
|
57
|
+
- Use `Glob` to enumerate `*.md` files in likely locations: `docs/`, `documentation/`, `.documentation/`, `README.md`, `CONTRIBUTING.md`, `.claude/`, and the repo root.
|
|
58
|
+
- Use `Grep` for keywords from the question across those files.
|
|
59
|
+
- If nothing promising turns up in markdown, *then* expand to `Grep` over source code as a last resort.
|
|
60
|
+
|
|
61
|
+
This is strictly worse than semantic search — but a visible fallback is much better than a silent one.
|
|
62
|
+
|
|
63
|
+
## Flow B — research tasks (internal or external)
|
|
64
|
+
|
|
65
|
+
**Triggers on evaluative, comparative, or exploratory questions:**
|
|
66
|
+
|
|
67
|
+
- "Is there a better X than Y?"
|
|
68
|
+
- "What's the best X for Y?"
|
|
69
|
+
- "Look into X."
|
|
70
|
+
- "Research Y."
|
|
71
|
+
- "Investigate how other projects solve Z."
|
|
72
|
+
- Any request that would naturally involve `WebSearch` / `WebFetch`.
|
|
73
|
+
|
|
74
|
+
**Also triggers on mixed questions** like "how does this repo use X, and is there a better alternative?" — handle the repo half via Flow A, then continue into Flow B for the alternatives half. The two flows compose naturally.
|
|
75
|
+
|
|
76
|
+
**Procedure:**
|
|
77
|
+
|
|
78
|
+
1. **If the question has a repo-context component, do Flow A first.** "How do we currently handle X" before "is there a better X" — you can't evaluate alternatives without understanding the current solution.
|
|
79
|
+
2. **Probe vault availability.** Call `mcp__semantic-vault__get_stats`. If it errors or the tool isn't present, drop to [Fallback: vault notes](#fallback-vault-notes). Otherwise the vault is live.
|
|
80
|
+
3. **Check the vault for prior research.** Call `mcp__semantic-vault__search_hybrid` with the topic. If past-you already investigated this, reuse the note — update it in place via `mcp__semantic-vault__update_note` rather than starting over. This is the main reason the vault exists.
|
|
81
|
+
4. **Do the actual research.** Use `WebSearch` / `WebFetch` / whatever tools are appropriate. Read multiple sources where you can — a single source is a single opinion.
|
|
82
|
+
5. **Write the findings to `.claude/.vault` as you go.** Use `mcp__semantic-vault__create_note` (or `update_note`). The full frontmatter format is in `references/vault-frontmatter.md` — read that file once per session before writing your first note.
|
|
83
|
+
6. **Link the note.** Use `[[wikilinks]]` to related notes in the body, and fill in `dependencies` / `related` / `supersedes` in the frontmatter so future sessions can traverse the graph. Unlinked notes are graveyards — they get written once and never found again.
|
|
84
|
+
7. **Answer the user from the note you just wrote.** The note is the canonical artifact; the chat response is a short summary with a pointer to the filename. The user's future self (or another session) can re-read the note; they can't re-read the chat.
|
|
85
|
+
|
|
86
|
+
### Fallback: vault notes
|
|
87
|
+
|
|
88
|
+
If step 2 indicates the `semantic-vault` MCP is unavailable but `.claude/.vault/` exists as a directory (or you can create it), use the `Write` tool directly — still follow the frontmatter format in `references/vault-frontmatter.md`. A session without the MCP server still has a filesystem; don't skip note-taking just because the semantic indexing won't happen. The index can be rebuilt later; lost notes can't.
|
|
89
|
+
|
|
90
|
+
If neither the MCP nor a filesystem `.claude/.vault/` directory is available *and* you can't create it (e.g., permission error), tell the user and put the findings directly in the chat as a clearly-marked "research findings" block — better than losing them entirely.
|
|
91
|
+
|
|
92
|
+
## The vault frontmatter is non-negotiable
|
|
93
|
+
|
|
94
|
+
Every `.md` file created in `.claude/.vault/` must start with YAML frontmatter. See `references/vault-frontmatter.md` for the full field reference and rationale. The short version is that the format is adapted from the 22-field docs frontmatter used elsewhere in the semantic-pages ecosystem, with the RAG-chunker fields dropped and two research-specific fields (`source`, `confidence`) added. A note without frontmatter won't index properly and becomes invisible to future searches — which defeats the whole point of writing it.
|
|
95
|
+
|
|
96
|
+
## Interaction with other Claude systems
|
|
97
|
+
|
|
98
|
+
- **The memory system** (`~/.claude/projects/**/memory/`) is for durable facts about the user and the project (who they are, what they prefer, what constraints are in play). It is NOT for research artifacts. Research goes in the vault; facts go in memory. When in doubt: *is this a body of findings on a specific topic?* → vault. *Is this a fact that would be useful to a completely different task?* → memory.
|
|
99
|
+
- **`Grep`/`Glob`** are for code-symbol lookups and as a Flow A fallback. Not the default for conceptual prose questions when semantic-pages is available.
|
|
100
|
+
- **`WebSearch`/`WebFetch`** are research *inputs* — their outputs should flow into vault notes, not into the conversation only. The chat response summarizes; the note preserves.
|
|
101
|
+
|
|
102
|
+
## What success looks like
|
|
103
|
+
|
|
104
|
+
- User asks "how does this repo handle auth?" → you call `search_hybrid`, read 2–3 notes, answer with filename citations. Tool call budget: 3–5. No `Grep`.
|
|
105
|
+
- User asks "what's the best CRM for small businesses?" → you search the vault for prior research (none), do web research, write `.claude/.vault/crm-smb-evaluation.md` with full frontmatter, answer from the note.
|
|
106
|
+
- User asks the same CRM question a week later → you find the existing note in the vault, skim it, either answer directly or update it with fresh findings and bump `last_updated`.
|
|
107
|
+
- User installs the skill in a repo without `hit-em-with-the-docs` → Flow A probe fails, you tell the user once, fall back to Glob/Grep for docs lookup. Flow B (vault) still works because `semantic-vault` is available.
|
|
108
|
+
- User's `.mcp.json` is broken entirely → both probes fail, you tell them, fall back to filesystem for both flows. You don't pretend everything's fine.
|
|
109
|
+
|
|
110
|
+
## What failure looks like
|
|
111
|
+
|
|
112
|
+
- Grep'ing the repo for a conceptual question when `mcp__semantic-pages__search_hybrid` is sitting right there.
|
|
113
|
+
- Writing research findings into the chat response and leaving no artifact on disk.
|
|
114
|
+
- Writing vault notes without frontmatter, or with ad-hoc frontmatter that won't index.
|
|
115
|
+
- Silently no-op'ing when an MCP server is missing instead of telling the user and falling back.
|
|
116
|
+
- Triggering on code-symbol lookups ("where is `parseAuth` defined") and wasting tool calls on semantic search for something `Grep` would answer in 100ms.
|
|
117
|
+
- Assuming both MCP servers travel together. They don't — the vault ships with this plugin, the docs index ships with `hit-em-with-the-docs`. Probe them separately.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "semantic-first",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"name": "flow-a-capability-existence-user-delete",
|
|
7
|
+
"flow": "A",
|
|
8
|
+
"prompt": "Is there a user delete in this repo that deletes a user AND their data completely?",
|
|
9
|
+
"expected_output": "Ambiguous-on-purpose case: a naive read sends this to Grep for a delete symbol, but the answer (whether the capability exists and how it's designed) lives in prose in design docs. The skill should try mcp__semantic-pages__search_hybrid first and only fall through to code search if the docs don't answer it. Success = used semantic search first, cited specific note filenames, did not start with grep.",
|
|
10
|
+
"files": []
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": 2,
|
|
14
|
+
"name": "flow-a-multi-part-infra-question",
|
|
15
|
+
"flow": "A",
|
|
16
|
+
"prompt": "What kind of git method is being used, and how many environments and domains/subdomains are there in each environment, and what are they?",
|
|
17
|
+
"expected_output": "Multi-part factual question where the answer is spread across several docs (git workflow, environments, domains all documented separately). Skill should use search_hybrid, read multiple notes, and ideally traverse via forwardlinks/backlinks to link the pieces together. Should cite each note used. No grepping source code. Success = pulled from multiple notes, composed a complete multi-part answer, cited filenames.",
|
|
18
|
+
"files": []
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": 3,
|
|
22
|
+
"name": "flow-b-pure-external-research",
|
|
23
|
+
"flow": "B",
|
|
24
|
+
"prompt": "What's the best CRM platform for a small business team of 10?",
|
|
25
|
+
"expected_output": "Pure external research, no repo context. Skill should: (1) search the vault for prior research on CRM evaluation, (2) do web research via WebSearch/WebFetch, (3) write a new .md file to .claude/.vault/ with full frontmatter (all required fields from references/vault-frontmatter.md), (4) answer from the note with a filename pointer. Success = a file was created at .claude/.vault/<slug>.md, frontmatter has all required fields with sensible values, note body has actual research content (not a stub), chat response cites the note filename.",
|
|
26
|
+
"files": []
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": 4,
|
|
30
|
+
"name": "flow-b-mixed-composition",
|
|
31
|
+
"flow": "B",
|
|
32
|
+
"prompt": "We use HashiCorp Vault for secrets management in this repo — is there a better alternative we should consider?",
|
|
33
|
+
"expected_output": "Hardest test: requires composing Flow A (find how the repo currently uses HashiCorp Vault, cite docs) with Flow B (research alternatives via web search, write vault note). The skill should NOT pick one flow and drop the other. Success = (1) semantic-pages was searched for current usage and specific notes were cited, (2) web research was performed for alternatives, (3) a .md file was written to .claude/.vault/ with full frontmatter and source: mixed (since it combines docs-lookup and web-research), (4) final answer references both the repo's current setup and the researched alternatives with explicit confidence, (5) the vault note contains a 'what we currently do' section drawn from Flow A findings.",
|
|
34
|
+
"files": []
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Vault note frontmatter — field reference
|
|
2
|
+
|
|
3
|
+
Every `.md` file written into `.claude/.vault/` must start with YAML frontmatter in this exact format. The schema is adapted from the 22-field docs frontmatter used by the semantic-pages ecosystem, with RAG-chunker fields removed (they're meaningless for scratchpad notes) and two research-specific fields added (`source`, `confidence`) because research artifacts need epistemic provenance.
|
|
4
|
+
|
|
5
|
+
## The template
|
|
6
|
+
|
|
7
|
+
Copy this and fill it in for every new note. Don't skip fields — if a field doesn't apply, use `null`, `[]`, or the default shown in the comment. Missing fields break graph traversal and semantic indexing.
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
---
|
|
11
|
+
title: "Note Title"
|
|
12
|
+
tier: research # research | investigation | scratch | finding | decision
|
|
13
|
+
topic: null # short kebab-case topic, e.g. "hashicorp-vault", "crm-evaluation", or null
|
|
14
|
+
domains: # free-form list; common values: security, backend, frontend, devops, infrastructure, product, tooling, ai
|
|
15
|
+
- security
|
|
16
|
+
audience: # who would find this note useful; free-form: self | team | all | <role>
|
|
17
|
+
- self
|
|
18
|
+
tags: # free-form keyword tags; used by search_hybrid
|
|
19
|
+
- secrets
|
|
20
|
+
- vault
|
|
21
|
+
status: active # active | superseded | draft | archived
|
|
22
|
+
last_updated: '2026-04-15' # ISO date, quoted string
|
|
23
|
+
source: web-research # web-research | docs-lookup | conversation | experimentation | mixed
|
|
24
|
+
complexity: low # low | medium | high — how hard the topic is to reason about
|
|
25
|
+
confidence: medium # low | medium | high — how much future-you should trust these notes
|
|
26
|
+
keywords: # precise search terms (more specific than tags)
|
|
27
|
+
- hashicorp-vault
|
|
28
|
+
- secret-management
|
|
29
|
+
dependencies: [] # notes that should be read first (filenames or [[wikilinks]])
|
|
30
|
+
related: [] # parallel/complementary notes
|
|
31
|
+
supersedes: [] # notes this replaces (old investigations that are now wrong)
|
|
32
|
+
summary: One-sentence description of what this note contains.
|
|
33
|
+
owner: self # self | team | <username>
|
|
34
|
+
---
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Field-by-field rationale
|
|
38
|
+
|
|
39
|
+
| Field | Purpose | Notes |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `title` | Human-readable. Shows up in search results. | Be specific: "HashiCorp Vault vs Infisical comparison" beats "Secrets research". |
|
|
42
|
+
| `tier` | What kind of note this is. | `research` = multi-source investigation. `investigation` = debugging a specific problem. `scratch` = quick notes, low confidence. `finding` = a conclusion distilled from research. `decision` = an architectural choice and its rationale. |
|
|
43
|
+
| `topic` | A coarse grouping tag. | Kebab-case. `null` if the note doesn't cluster with others. |
|
|
44
|
+
| `domains` | Broad technical areas. | Free-form list. Multiple is fine. Used for filtering. |
|
|
45
|
+
| `audience` | Who benefits from reading this. | Default `[self]`. Use `[team]` or `[all]` only if the note is a finished artifact worth sharing. |
|
|
46
|
+
| `tags` | Free-form keywords. | These are the primary filter dimension in `search_hybrid`. Err on the side of more tags. |
|
|
47
|
+
| `status` | Is this note still valid? | `active` for current work. `superseded` when replaced by a newer investigation (fill `supersedes` on the new note). `draft` for in-progress. `archived` when deliberately retired. |
|
|
48
|
+
| `last_updated` | ISO date, quoted. | Bump this on every edit, even small ones. |
|
|
49
|
+
| `source` | Where the information came from. | `web-research` = Google/WebFetch. `docs-lookup` = pulled from semantic-pages. `conversation` = came from the user in chat. `experimentation` = ran something and observed results. `mixed` = combination. This is epistemic provenance and matters for re-reading later. |
|
|
50
|
+
| `complexity` | How hard is this topic. | Affects reading-time expectations and whether future-you should budget extra time. |
|
|
51
|
+
| `confidence` | How much to trust this note. | The single most valuable field for research notes. `low` confidence on a CRM recommendation after reading one blog post is useful information; pretending it's `high` is worse than not writing the note at all. |
|
|
52
|
+
| `keywords` | Precise search terms. | More specific than `tags` — actual names, product names, technical terms that exact-match searches will hit. |
|
|
53
|
+
| `dependencies` | Prerequisite notes. | `[[wikilinks]]` or filenames. Lets the graph traversal follow "what should I read first?". |
|
|
54
|
+
| `related` | Parallel notes. | Complementary topics, not prerequisites. |
|
|
55
|
+
| `supersedes` | Notes this replaces. | When you revisit a topic and the old note is now wrong, list it here and mark the old note's `status: superseded`. |
|
|
56
|
+
| `summary` | One sentence. | This is what shows up in search snippets — make it dense and informative. |
|
|
57
|
+
| `owner` | Who wrote it. | `self` by default. `team` for shared findings. `<username>` if you want to attribute. |
|
|
58
|
+
|
|
59
|
+
## What got dropped from the 22-field docs format, and why
|
|
60
|
+
|
|
61
|
+
The published-docs format includes these fields that are *not* in the vault format:
|
|
62
|
+
|
|
63
|
+
- `feature` → merged into `topic` and `tags`. Research notes rarely map to a single feature.
|
|
64
|
+
- `version` → research notes aren't versioned artifacts; they're snapshots in time.
|
|
65
|
+
- `size_kb`, `line_count`, `read_time_min` → auto-computed by the docs metadata generator for RAG chunking. Irrelevant for scratchpad notes.
|
|
66
|
+
- `load_priority` → used by published docs to hint load order; not meaningful for vault notes.
|
|
67
|
+
- `chunk_strategy` → RAG chunking hint; not used by the vault indexer in the same way.
|
|
68
|
+
|
|
69
|
+
If the user ever decides to promote a vault note to published docs, they'll need to add these fields back. Until then, they're noise.
|
|
70
|
+
|
|
71
|
+
## Two fields added to the vault format
|
|
72
|
+
|
|
73
|
+
- `source` — where the findings came from. Not in the docs format because published docs are the source of truth. Research notes aren't — knowing whether a conclusion is based on a blog post, a spec, or an experiment is critical for judging its weight later.
|
|
74
|
+
- `confidence` — how confident past-you was. Research notes lose value quickly if future-you can't tell whether the author was confident or speculating. A note that says "this library is the best choice" with `confidence: low` is actionable; one without confidence information is a trap.
|
|
75
|
+
|
|
76
|
+
## Example: fully filled-in note
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
---
|
|
80
|
+
title: "HashiCorp Vault vs Infisical for SMB secret management"
|
|
81
|
+
tier: research
|
|
82
|
+
topic: secrets-management
|
|
83
|
+
domains:
|
|
84
|
+
- security
|
|
85
|
+
- devops
|
|
86
|
+
audience:
|
|
87
|
+
- self
|
|
88
|
+
- team
|
|
89
|
+
tags:
|
|
90
|
+
- secrets
|
|
91
|
+
- hashicorp-vault
|
|
92
|
+
- infisical
|
|
93
|
+
- comparison
|
|
94
|
+
status: active
|
|
95
|
+
last_updated: '2026-04-15'
|
|
96
|
+
source: mixed
|
|
97
|
+
complexity: medium
|
|
98
|
+
confidence: medium
|
|
99
|
+
keywords:
|
|
100
|
+
- hashicorp-vault
|
|
101
|
+
- infisical
|
|
102
|
+
- secret-management
|
|
103
|
+
- smb
|
|
104
|
+
dependencies: []
|
|
105
|
+
related:
|
|
106
|
+
- secrets-rotation-patterns.md
|
|
107
|
+
supersedes: []
|
|
108
|
+
summary: Comparison of HashiCorp Vault and Infisical for small-to-medium business secret management, with cost, ops overhead, and feature tradeoffs.
|
|
109
|
+
owner: self
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
# HashiCorp Vault vs Infisical for SMB secret management
|
|
113
|
+
|
|
114
|
+
## TL;DR
|
|
115
|
+
|
|
116
|
+
<one paragraph conclusion>
|
|
117
|
+
|
|
118
|
+
## What we currently do
|
|
119
|
+
|
|
120
|
+
<if Flow A surfaced this, summarize from semantic-pages findings and cite the docs>
|
|
121
|
+
|
|
122
|
+
## Options evaluated
|
|
123
|
+
|
|
124
|
+
### HashiCorp Vault
|
|
125
|
+
...
|
|
126
|
+
|
|
127
|
+
### Infisical
|
|
128
|
+
...
|
|
129
|
+
|
|
130
|
+
## Recommendation
|
|
131
|
+
|
|
132
|
+
<with explicit confidence level>
|
|
133
|
+
```
|