wiki-crystallize — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited wiki-crystallize (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Distils ephemeral conversation into durable, structured wiki knowledge.
Every invocation starts here. Wiki root is the directory containing wiki-config.md. Skills derive it at runtime. Pages this skill writes follow the structure in wiki-schema.md - both files need to be present.
C:\, D:\, /), OS root, or user home (C:\Users\X, /home/X, /Users/X) → stop immediately. Do not search. Do not attempt to locate wiki-config.md. Go directly to step 6.references/setup-help.md is also available; read it if the user needs orientation or if you get stuck.blacklist, index_excludes, ingested_folder, ingested_subdirs, log_format). If not found, skip to step 6.wiki-config.md, verify wiki-schema.md exists and parses as YAML. Do not proceed to the Workflow below until you have a definite verdict (present / missing / malformed). Then:mandatory_fields, conditional_fields, enums) and proceed to the Workflow.wiki-config is in <available_skills> (from step 3):references/wiki-schema.md.references/setup-help.md for manual repair guidance. If the user explicitly instructs a reset (not as an automatic fallback), warn that it overwrites any customizations, then deploy the default on explicit OK.The same two-branch structure applies if wiki-config.md itself was found malformed in step 4: wiki-config available → stop and recommend /wiki-config, end of turn; unavailable → guided manual repair via setup-help.md.
/wiki-config; offer bundled deployment if unavailable).This skill requires filesystem read and write access. If unavailable on the current surface (web, mobile), offer to produce the wiki page as an artifact that the user can save manually.
Crystallize compresses the durable signal from a chat (decisions, findings, patterns, open questions) into a structured wiki page that orients any future session faster than re-reading the thread.
Use it liberally - any time something meaningful has happened. It is not reserved for heavy or exhausted threads. It is the session management mechanism: the wiki is the memory that persists across chat cycles; chat history is scaffolding. Crystallize before retiring a chat, not as a cleanup step afterward.
Keep: Decisions made, patterns established, lessons learned, open questions, current understanding, key findings. Discard: Exploratory back-and-forth, dead ends, process chat, superseded drafts.
| Level | When to use | Closing posture |
|---|---|---|
| Single session | End of a working session; context still valuable | Pause, not close |
| Topic thread | Thread getting heavy across sessions | Recommend fresh start |
| Whole chat | Thread exhausted or explicitly archived | Strong close |
Provide one of:
If none are provided, ask the user to describe what this crystallization should capture before proceeding.
Config Discovery has already loaded wiki-config.md and wiki-schema.md into context. Do not re-read them; proceed from here assuming both are available.
Read Overview.md to understand the current state of knowledge; crystallize adds to the wiki, does not duplicate it.
Identify durable knowledge (decisions, findings, patterns, open questions, current best understanding) and discard conversational scaffolding (exploratory back-and-forth, superseded drafts, process steps, corrections already incorporated).
Before scanning candidates, check whether the topic belongs to an existing domain. If a Domain Home exists for that domain, it is the presumptive target - scan to confirm fit, not to find alternatives. Prefer updating a hub over creating a new file.
Read index.md and scan for:
Strong match found: update it. Proceed to Step 4a.
Multiple candidates or unclear: ask the user: "I found these pages that might be the right home: [list]. Update one, or create new?" Wait for their answer.
No existing page fits: confirm with the user before creating, unless the content is clearly self-contained.
Key rule: When in doubt, update a hub rather than create. New pages fragment the graph; rich hubs compound it.
Read the full current content of the target page. Integrate the crystallized knowledge:
description: field if the page's section structure has changed, the scope has shifted, or substantial new content was added. For incremental additions to existing sections, leave description: unchanged. Agent judgment.version:, changes:, and updated: fields. Leave date: unchanged - it is the creation date. Increment crystallize_count:: read the current value and add 1; if the field is absent, write 1.page_type is present in the page's frontmatter and still accurate. If missing, infer from the page's content and structure, then confirm with the user before writing it. If present but the page appears to have outgrown its current type (e.g. a knowledge page now functions as a domain hub, or a knowledge page has grown into a comparative survey), offer a promotion: "This page is typed as `<type>` but reads more like a `<better-type>` now. Want me to update `page_type` while I'm here?" Never auto-promote; always confirm.Determine `page_type` and load template:
Choose a page_type from the schema enum. Typical crystallize outputs: knowledge (single-topic findings), domain-home (domain hub being bootstrapped), overview (vault-level synthesis), survey (comparative findings across multiple items). When the type is not obvious, ask the user before proceeding. Validate against the schema enum (already in context).
Read templates_folder from wiki-config.md (already in context). If present, attempt to read <wiki_root>/<templates_folder>/<page_type>.md. If found, use it as the body scaffold - substitute {{TITLE}}, {{DATE}}, {{PAGE_TYPE}}, {{DESCRIPTION}} and populate sections with crystallised content. If the template file is missing, emit one line: "No template found for `<page_type>` - using default structure." and use the hardcoded template below. If templates_folder is absent from the config, skip the lookup silently and use the hardcoded template below.
Fallback template (used when no vault-side template is found):
---
title: Topic - Current State
version: 1.0
date: YYYY-MM-DD
updated: YYYY-MM-DD
crystallize_count: 1
description: "~200 char synthesis of what this page covers"
changes: "Crystallized from [source chat / session description]"
---
# Topic - Current State
## What Was Established
[2-4 sentences: the core finding or current understanding]
## Key Decisions
[Decisions made, with brief rationale]
## Current Understanding
[The substantive content, structured as appropriate: prose, tables, lists]
## Open Questions
[What remains unresolved. Be specific.]
## Related Pages
[[Related Page 1]], [[Related Page 2]]
## Sources
| Title | Publisher | Date | Links |
|---|---|---|---|Choose the most specific placement using the folder structure from index.md. Do not place in blacklisted paths, raw/, archive/, or Projects/. Confirm with the user if the location is not obvious.
If a new page was created in Step 4b, add an entry in the correct section of index.md. If an existing page was updated in Step 4a, no index change is needed.
Update the relevant domain section in Overview.md only if the crystallization represents a significant shift: a major decision reached, a research phase completed, or a new domain established. Do not update for incremental additions.
Add the new entry at the top of log.md, below the header line, above all existing entries.
## [YYYY-MM-DD] crystallize | <Topic or Chat Name>
Updated [[Existing Page]] with new findings. [or: Created [[New Page]].]
[Brief note on what was captured. Updated Overview.md: yes/no.]Read two signals to decide which closing to deliver:
Signal 1: stated intent. Did the user invoke crystallize with explicit whole-chat language ("before I close this", "wrapping up this thread", "archiving")? If yes, deliver a strong close.
Signal 2: thread weight. Check log.md for prior crystallize entries on this same topic. Multiple prior entries mean the thread has been accumulating across sessions and a fresh start is warranted; deliver a strong close. A first crystallize on a topic, or a session that was focused and light, calls for a session wrap.
Note: context window fullness cannot be precisely measured from within the skill. This is a qualitative judgment based on observable signals.
Session wrap - thread still has value, established context worth keeping:
"Captured. [[Topic]] reflects today's decisions and findings. Continue this chat or start a new one; both work. If you continue, the context here still has value; if you start fresh, read [[Topic]] first."
Strong close - thread is heavy or explicitly being archived:
"This chat can now be closed. [[Topic]] captures everything worth keeping. Start your next session by reading that page; it will orient a fresh context faster than carrying this thread forward."
This skill does wiki work: ingesting, synthesising, organising, and querying .md pages to compound knowledge over time. It does not modify tool or plugin settings, shell out to manipulate application state, or replicate behaviours that belong to whatever app the user reads their notes in. If a request cannot be satisfied by reading and writing .md files inside the wiki root, decline and explain why.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.