{"slug":"cp-skill-convert","title":"cp-skill-convert","summary":"Convert notes between types. Currently supports text to note by adding unverified structured frontmatter, renaming the file to match the title, and fixing backlinks. Use with a note path or note name.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-23T11:50:35.68401Z","repo":{"url":"https://github.com/zby/commonplace","stars":89,"forks":11,"license":"CC-BY-4.0","updatedAt":"2026-09-26T11:57:20Z"},"bodyHtml":"<hr>\n<h2>name: cp-skill-convert\ndescription: Convert notes between types. Currently supports text to note by adding unverified structured frontmatter, renaming the file to match the title, and fixing backlinks. Use with a note path or note name.\ntype: kb/types/instruction.md\nuser-invocable: true\nallowed-tools: Read, Edit, Grep, Glob, Bash\ncontext: fork\nmodel: sonnet\nargument-hint: \"[note] — path or filename in kb/notes/\"</h2>\n<h2>EXECUTE NOW</h2>\n<p><strong>Target: $ARGUMENTS</strong></p>\n<p>Parse immediately:</p>\n<ul>\n<li>If target contains just a note name or path: convert text → note</li>\n<li>If target requests another conversion form, explain that only text → note is currently implemented</li>\n<li>If target is empty: ask which note to convert</li>\n</ul>\n<h2>Supported conversions</h2>\n<h3>text → note (current)</h3>\n<p>The primary conversion. Adds frontmatter to a raw text file, making it structured and connectable.</p>\n<h4>Step 1: Locate and verify</h4>\n<p>Resolve the target to a file path. If just a name, search <code>kb/notes/</code> recursively.</p>\n<p>Read the file. Verify it has <strong>no frontmatter</strong> (does not start with <code>---</code>). If it already has frontmatter, report that it's already structured and stop.</p>\n<h4>Step 2: Understand the content</h4>\n<p>Read the full file. Identify:</p>\n<ul>\n<li>The core topic (what is this about?) — needed for writing the description</li>\n<li>Whether the current filename matches the <code># Title</code> heading (see Step 3a)</li>\n</ul>\n<h4>Step 3: Generate frontmatter</h4>\n<p>Add YAML frontmatter at the top of the file:</p>\n<pre><code>---\ndescription: [50-250 chars, adds mechanism/scope/implication beyond the title]\ntype: kb/types/note.md\ntraits: []\ntags: []\n---\n</code></pre>\n<p><strong>Rules:</strong></p>\n<ul>\n<li>Do not add <code>user-verified</code> — conversion structures the note but cannot grant human attestation.</li>\n<li><code>description</code> must add information beyond the title. See <a href=\"../../types/note.md\">note base type</a> for quality criteria.</li>\n<li><code>traits</code> is always <code>[]</code> — trait assignment is semantic work, done later by a writer or human reviewer; deterministic validation does not infer traits.</li>\n<li><code>tags</code> is always <code>[]</code> — tag assignment is semantic work, done later by the <code>cp-skill-connect</code> skill or human review.</li>\n<li>Do NOT modify the body content. Conversion adds structure, not editorial changes.</li>\n</ul>\n<h4>Step 3a: Rename the file</h4>\n<p>After adding frontmatter, check whether the filename matches the <code># Title</code> heading.</p>\n<p>The filename should match the title. Whether the title itself is good is a semantic question for a human or a frontmatter review assay; deterministic validation checks only its structural limits.</p>\n<p><strong>Decide whether to rename:</strong></p>\n<ul>\n<li>If the current filename is already a good slug of the <code># Title</code> — keep it</li>\n<li>If the filename diverges from the title (e.g. file is <code>connect-pipeline-features.md</code> but the title is <code># Connect pipeline should detect reciprocal links</code>) — rename it to match</li>\n</ul>\n<p><strong>To rename:</strong></p>\n<ol>\n<li>Derive the new filename from the <code># Title</code> heading. Slugify: lowercase, hyphens for spaces, strip punctuation, <code>.md</code> extension.</li>\n<li>Check for backlinks to the old path:\n<pre><code>rg -l 'old-filename\\.md' kb/\n</code></pre>\n</li>\n<li>If backlinks exist, update them all to point to the new filename (preserve the same relative path structure — only the filename changes, not the directory).</li>\n<li>Rename the file:\n<pre><code>git mv old-path/old-filename.md old-path/new-filename.md\n</code></pre>\n</li>\n</ol>\n<p><strong>Rules:</strong></p>\n<ul>\n<li>The file stays in its current directory. Rename only, no move.</li>\n<li>If the title heading changed during frontmatter addition (it shouldn't — see \"Do NOT modify body content\"), use the original title.</li>\n</ul>\n<h4>Step 4: Report</h4>\n<pre><code>=== CONVERTED: filename.md ===\n\ntext → note (unverified)\n\nrenamed: old-filename.md → new-filename.md  [or \"filename unchanged\" if no rename]\nbacklinks updated: 3 files  [or \"none\" if no backlinks]\n\ndescription: [the description you wrote]\ntags: []\n\nNext steps:\n- Run the `cp-skill-connect` skill on `new-filename.md` — find connections\n- Run the `cp-skill-validate` skill on `new-filename.md` — check deterministic structure and references\n- Optionally ask the user to verify the artifact after review; only the human may add `user-verified: true`\n===\n</code></pre>\n<h3>Future conversions (not yet implemented)</h3>\n<p>These are documented as directions, not working features. If a user requests one, explain it's not implemented yet.</p>\n<ul>\n<li><strong>note → structured-claim</strong>: add Evidence/Reasoning/Caveats sections and set the collection-local structured-claim type</li>\n<li><strong>note → spec</strong>: add Design/Implementation sections</li>\n<li><strong>note → review</strong>: add Findings section, date</li>\n<li><strong>note → adr</strong>: add Context/Decision/Consequences sections</li>\n<li><strong>any → text</strong>: strip frontmatter, demote to raw capture (for notes that didn't work out)</li>\n</ul>\n<h2>Critical Constraints</h2>\n<p><strong>Never:</strong></p>\n<ul>\n<li>Add <code>user-verified</code> — that requires explicit human attestation after review</li>\n<li>Modify body content — only add/change frontmatter</li>\n<li>Convert a text file that already has frontmatter (it's not a text file)</li>\n<li>Write a description that merely restates the title</li>\n<li>Move a file to a different directory — rename only changes the filename within its current directory</li>\n<li>Install software — if a required tool is missing, bail with an error</li>\n</ul>\n<p><strong>Always:</strong></p>\n<ul>\n<li>Leave <code>user-verified</code> absent for text → note conversions</li>\n<li>Write a description that adds mechanism, scope, or implication</li>\n<li>Rename the file to match the <code># Title</code> heading (unless it already does)</li>\n<li>Fix all backlinks when renaming</li>\n<li>Use <code>git mv</code> for renames so git tracks the history</li>\n<li>Report what was done so the user can review</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":5482,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-27T19:33:36.733098Z","sha256":"4D1DA5C282A3B585F9CA2AA779BA869E8FE08F2D0D7163ED94CBF8607C23206C","sizeBytes":2462},"review":null,"source":{"repositoryUrl":"https://github.com/zby/commonplace","path":"kb/instructions/cp-skill-convert","license":"CC-BY-4.0","commit":"7e7c6de515ca584a50311178e3b32022282ceb6d","subtreeSha":"8B89DD5B21A7743618B2930B076A2D2936BCB98A661711673F6BCED0343B7902","lastSyncedAt":"2026-09-27T19:33:17.550874Z"},"reviewedAt":"2026-09-27T19:34:10.572969Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/zby/commonplace/tree/main/kb/instructions/cp-skill-convert"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install zby-commonplace@llmmart"},{"target":"git","command":"git clone https://github.com/zby/commonplace.git"}]}