consolidate-notes
Promote existing research into a stable-status canonical article under `articles/` in a Knowledge Base project (the `knowledge-base` starter pack). Read when a decision has actually been made and the team wants the source-of-truth written down, or when asked to consolidate, canonicalize, promote research, or supersede an older article. Carries the decision-confirmation gate, the `supersedes:` chain that keeps the evidence trail intact, and the canonical voice. Does not conduct new research — that is the sibling `research-with-sources` skill.
git clone --depth 1 https://github.com/inkeep/open-knowledge /tmp/consolidate-notes && cp -r /tmp/consolidate-notes/packages/server/assets/skills/packs/knowledge-base/consolidate ~/.claude/skills/consolidate-notesSKILL.md
# Consolidate — promote research into a canonical article
> This skill is pack guidance. The platform `/open-knowledge` skill (read/write/preview/linking/grounding rules) still governs every markdown operation — this layers the procedure on top.
Promote existing research on a topic into a canonical article under `articles/`. **Canonical, not provisional** — the output is the source of truth for future agents, not a snapshot of uncertainty.
The content directory is the resolved `content.dir` — read it with `config({ key: 'content.dir' })` if you don't already know it. Paths below are relative to it.
**Legacy reads:** Existing research and articles may use `status: provisional` / `canonical`, and existing `sources:` may contain string paths. Treat those as draft / stable and source resources. Do not mass-rewrite them; new writes use the OKF forms below.
## STOP gate: has a decision actually been made?
Consolidation is **promotion, not creation**. If the team hasn't decided, the resulting "canonical" article lies about the team's state of understanding — future agents read it, act on it, and the false certainty compounds.
Before any write, confirm out loud with the user:
- **What is the actual decision?** (e.g., "We chose Yjs for CRDT" — not "Yjs is one option")
- **What alternatives were considered and rejected?** (these go in "Alternatives considered," not as equals)
- **What's the rationale the team used?** (not your reconstruction from sources)
If the decision is still open, **do not consolidate**. Tell the user: "The research is still provisional. When the team decides, come back and consolidate with the outcome." Then stop.
## When to use this procedure
- A team has made a decision after research and wants the outcome committed as canonical knowledge
- You want to compact several provisional research notes into one authoritative article
- A developer asks to "consolidate" or "finalize" the knowledge on a topic
Do NOT consolidate when:
- The team has not actually decided (the output would be misleading — keep it as research)
- You have not read the underlying sources (the output would lack evidence)
## Principle: canonical, not provisional
A consolidated article is the **source of truth**. Agents reading it should not need to dig further for context — it should stand on its own. That means:
- Clear, direct statements (no "tentative", no "initial findings")
- Decisions stated as decisions, not options
- Rationale explained so future readers understand the why
- Trade-offs acknowledged but framed against the chosen path, not as a menu
- Evidence linked but not the whole story — this article is the destination, not a trail
## Steps
### 1. Load the research + sources
Locate research articles on this topic:
- Use `exec("grep -rn <topic-keyword> <content-dir>")` to find prior research, or `exec("ls -A research")` if the project groups research in a known location
- Read each research article fully via `exec("cat <path>")` (rich enrichment gives frontmatter + shadow-repo activity + project git history + backlinks)
- Follow its `sources:` frontmatter list — read every referenced source file
- Also read any existing canonical article on the topic — if one already exists, you may be **updating** it rather than creating a new one
If there is no research to consolidate, stop. Consolidation is promotion, not creation. Do the `/research-with-sources` skill first.
### 2. Re-confirm the decision
You already confirmed the decision at the STOP gate at the top. This step is a brief re-check after loading the research in Step 1 — occasionally the research surfaces something that makes the "decision" look less decided than the user initially claimed (an un-rebutted open question, an alternative they forgot about). If the loaded research reveals that, pause and re-confirm with the user before writing.
### 3. Write the canonical article
**Persist as you go (MUST).** For a large consolidation drawing on several research docs, create the article skeleton — frontmatter + the headings below — first, then `edit` each section in as you finish it; don't hold the whole synthesis in context for one final write. A rate limit or crash mid-synthesis then costs you one section, not the entire article. (The platform skill's Writing section carries this rule for all long-running work: the knowledge base is your checkpoint.)
Save inside the content directory. Path convention depends on the project:
- If the project uses the three-layer lifecycle (`external-sources/` → `research/` → `articles/`), save under `articles/`, grouped by topic subfolder when the area is broad (e.g., `articles/editor/crdt-architecture.md`)
- If the project has an existing canonical-docs layout (`docs/`, `guides/`, etc.), save there in a location that matches the project's conventions
- Ask the user when the canonical location is ambiguous
Frontmatter:
```yaml
---
title: Descriptive title
description: One-line summary of what this article covers
type: article
status: stable
date: YYYY-MM-DD
tags:
- article
- canonical
- topic-tag
supersedes:
- <path-to-research-article>.md
---
```
Structure:
```markdown
## Summary
[One paragraph: what the decision is and why. A reader who reads only this paragraph should know the outcome.]
## Context
[What problem does this solve? What constraints shaped the decision?]
## Decision
[The chosen approach, stated directly. Not "we recommend" — "we chose".]
## Rationale
[Why this path over alternatives. Grounded in the constraints from Context.]
## Trade-offs
[What we gave up by choosing this path. Frame against the chosen decision, not as a menu.]
## Alternatives considered
[Briefly: what else was on the table, why it was rejected. Link to the research article for deeper analysis.]
## Implementation notes
[How this gets realized in the codebase — key files, patterns, gotchas.]
## Further reading
[Links to research articles and external sources for readers who want theHow to work in a Codebase Wiki project (the `codebase-wiki` starter pack): an agent-authored, source-grounded wiki of the surrounding codebase. Read when the project has a `wiki/` knowledge base with `architecture/`, `modules/`, `flows/`, `concepts/`, and `guides/` sections plus `wiki/OVERVIEW.md`, or when asked to generate or refresh a wiki of this codebase. Carries the per-folder rules and freshness + log discipline, summarizes the audience/depth knobs and source-reference convention, and bundles the full generate/refresh procedure in `references/`. Complements the platform `open-knowledge` skill; does not replace it.
Frame a new design proposal (RFC-shape) under proposals/ — problem before solution, named beneficiary and observable change, real alternatives, honest drawbacks, and a live open-questions backlog. Read when asked to frame a proposal, write an RFC, propose a design, pitch a change, draft a PRD-style design doc, or open a design proposal for review. Do NOT read to record a decision after it is accepted (use record-a-decision), to write an implementation spec (use write-a-spec), to write a postmortem (use write-a-postmortem), or to review or critique an existing design (use review-a-design).
How to work in a Knowledge Base project (the `knowledge-base` starter pack). Read when the project has the three-layer source-grounded layout — `external-sources/` → `research/` → `articles/` — or when asked how this project is organized. Carries the layer model, per-folder rules, status flows, and log discipline so this guidance does NOT live inside template bodies or log.md. The three procedures live elsewhere: ingest in the platform `open-knowledge` skill, research and consolidate as their own sibling skills in this pack. Complements the platform `open-knowledge` skill; does not replace it.
How to work in a Plain Notes project (the `plain-notes` starter pack): a flat notes/ folder plus a daily/ journal. The 'I just want to write' layout. Read when the project has these folders, OR when asked to jot a note, capture a quick thought, or write today's journal entry. Carries the linking habit and daily-entry behavior so templates and folder descriptions stay minimal. Complements the platform `open-knowledge` skill; does not replace it.
Open Knowledge Format (OKF) v0.2 guidance. Use when creating, reading, reviewing, or maintaining an OKF bundle; responding to OpenKnowledge `okf` plugin warnings; or choosing types, provenance, links, indexes, or logs.
Authoritative agent-runtime contract for working inside an OpenKnowledge project — a markdown-CRDT knowledge base exposed over MCP. Use whenever reading, listing, searching, editing, or linting any `.md` or `.mdx` file in the project, and before any `mcp__open-knowledge__*` tool call (`exec`, `search`, `write`, `edit`, `lint`, and the rest). Installed by `ok init`, so its presence means this is an OpenKnowledge project and it governs every markdown file here. Covers the read/write tool surface, grounding and linking rules, folder/template conventions, the live browser preview, and the rule that OK's MCP tools — never native file tools — handle in-scope markdown.
Read when the user asks what OpenKnowledge is, wants to install it on a repository, wants to open or preview a single markdown file that is not part of an OpenKnowledge project, wants to share an OpenKnowledge project with collaborators, asks whether OpenKnowledge supports a particular capability, or asks how `ok init` / `ok cowork` / OK Desktop set up a project. Do NOT load to perform OpenKnowledge reads/writes — the runtime guidance for editing markdown inside an initialized OK project ships as a separate project-local skill installed into each detected agent's skills dir (for example `.claude/skills/open-knowledge/`) whenever `ok init` runs.
Use when the user wants to create, author, write, or design a new Agent Skill (a SKILL.md) — for OpenKnowledge or for their editors — including requests like 'help me write a skill', 'make a skill that…', 'turn this workflow into a skill', or improving an existing skill's triggering and discipline. Also use when capturing reusable agent guidance that should live as an installable skill rather than a one-off prompt. Covers choosing scope (project vs global), authoring inside a plugin or skills-distribution repo (write in the repo's own layout, never install), the SKILL.md frontmatter contract, progressive-disclosure structure, evaluating the skill, and installing it into the user's editors.