chore: apply Anthropic best practices to all skills (v1.4.2)

- Add `allowed-tools` frontmatter to all 10 SKILL.md files for tool pre-approval
- Soften kepano/obsidian-skills dependency in 4 skills (canvas, obsidian-bases, obsidian-markdown, wiki-ingest) — now recommends if installed, doesn't require
- Soften banana-claude dependency in canvas skill
- Improve trigger descriptions for defuddle (+4 phrases) and obsidian-markdown (+5 phrases)
- Remove docs/superpowers/plans/ (contained private paths)
- Gitignore claude-obsidian-archive/ and _attachments/
- Bump version to 1.4.2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Daniel
2026-04-10 16:27:50 +03:00
parent ebbb982074
commit 2f4798e3fe
14 changed files with 27 additions and 799 deletions

View File

@@ -6,7 +6,7 @@
}, },
"metadata": { "metadata": {
"description": "claude-obsidian: Claude + Obsidian knowledge companion by AgriciDaniel", "description": "claude-obsidian: Claude + Obsidian knowledge companion by AgriciDaniel",
"version": "1.4.1" "version": "1.4.2"
}, },
"plugins": [ "plugins": [
{ {
@@ -17,7 +17,7 @@
"ref": "main" "ref": "main"
}, },
"description": "Claude + Obsidian knowledge companion. Sets up a persistent, compounding wiki vault. Covers memory management, session notetaking, knowledge organization, and agent context across projects.", "description": "Claude + Obsidian knowledge companion. Sets up a persistent, compounding wiki vault. Covers memory management, session notetaking, knowledge organization, and agent context across projects.",
"version": "1.4.1", "version": "1.4.2",
"author": { "author": {
"name": "AgriciDaniel", "name": "AgriciDaniel",
"url": "https://github.com/AgriciDaniel" "url": "https://github.com/AgriciDaniel"

View File

@@ -1,6 +1,6 @@
{ {
"name": "claude-obsidian", "name": "claude-obsidian",
"version": "1.4.1", "version": "1.4.2",
"description": "Claude + Obsidian knowledge companion. Sets up a persistent, compounding wiki vault. Covers memory management, session notetaking, knowledge organization, and agent context across projects. Based on Andrej Karpathy's LLM Wiki pattern.", "description": "Claude + Obsidian knowledge companion. Sets up a persistent, compounding wiki vault. Covers memory management, session notetaking, knowledge organization, and agent context across projects. Based on Andrej Karpathy's LLM Wiki pattern.",
"author": { "author": {
"name": "AgriciDaniel", "name": "AgriciDaniel",

6
.gitignore vendored
View File

@@ -81,3 +81,9 @@ Claude SEO*.png
# Private Skool Hub assets — not for public repos # Private Skool Hub assets — not for public repos
_attachments/images/skool-hub/ _attachments/images/skool-hub/
# Archive of old versions (cosmic-brain, GIF assets)
claude-obsidian-archive/
# User-specific attachments
_attachments/

View File

@@ -1,788 +0,0 @@
# claude-obsidian Full Repo Audit Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Comprehensive read-only audit of every layer of the claude-obsidian repo — plugin manifest, skills, commands, agents, hooks, Obsidian vault config, wiki content, README, install guide, and git hygiene. No changes. Report findings only.
**Architecture:** 12 parallel audit areas, each checked independently. Findings consolidated into a single AUDIT-REPORT.md at the end. Every check is either PASS, WARN (works but suboptimal), or FAIL (broken/incorrect).
**Tech Stack:** bash, python3 (json validation), grep, git, manual file reading
---
## Audit Areas Overview
```
Area 1 — Git health & .gitignore effectiveness
Area 2 — Plugin manifests (plugin.json + marketplace.json)
Area 3 — Skill files (7× SKILL.md + references/)
Area 4 — Command files (4× commands/*.md)
Area 5 — Agent files (2× agents/*.md)
Area 6 — Hooks (hooks/hooks.json)
Area 7 — Obsidian vault config (.obsidian/*.json)
Area 8 — Obsidian plugin files (4 plugins)
Area 9 — CSS snippets (3 files)
Area 10 — Wiki content (all .md pages + canvases)
Area 11 — Documentation accuracy (README, WIKI.md, CLAUDE.md, install-guide.md, setup-vault.sh)
Area 12 — Cross-file consistency + security
```
---
## Task 1: Git Health & .gitignore Effectiveness
**Files to read:** `.gitignore`, output of `git status`, `git ls-files`, `git remote -v`, `git fsck`
- [ ] **Step 1: Check working tree and remotes**
```bash
cd /home/agricidaniel/claude-obsidian
git status
git remote -v
git fsck --quiet 2>&1
```
Expected: clean working tree, origin=AgriciDaniel/claude-obsidian, community=avalonreset-pro/claude-obsidian, no fsck errors.
- [ ] **Step 2: Verify .gitignore is actually blocking personal files on disk**
```bash
cd /home/agricidaniel/claude-obsidian
git check-ignore -v \
"2026-04-07 14-19-00.mkv" \
"Claude SEO Posts cover 1.gif" \
"Cosmic Brain Clean.gif" \
"Cosmic Brain Cover.png" \
"cosmic code.png" \
"PROMPT.md" \
"WIKI 1.md" \
"Welcome.md" \
"Untitled.canvas" \
"Untitled 1.canvas" \
"Demo Images.canvas" \
"Banana Images.canvas" \
"Untitled.base" \
"Excalidraw/" \
"_attachments/code-genesis.png" \
"_attachments/neural-voyager.png" \
"_attachments/the-frontier.png" 2>&1
```
Expected: every file returns a matching .gitignore rule. FAIL if any file is NOT ignored.
- [ ] **Step 3: Confirm no personal files are accidentally tracked**
```bash
cd /home/agricidaniel/claude-obsidian
git ls-files | grep -E "(skool-hub|Claude SEO|Cosmic Brain|cosmic code|Nate|PROMPT|Untitled|Banana|Demo Images|\.mkv|\.mp4|\.mov)"
```
Expected: zero output. FAIL if any match.
- [ ] **Step 4: Check Excalidraw main.js and data.json are NOT tracked**
```bash
cd /home/agricidaniel/claude-obsidian
git ls-files .obsidian/plugins/obsidian-excalidraw-plugin/
```
Expected: only `manifest.json` and `styles.css`. FAIL if `main.js` or `data.json` appear.
- [ ] **Step 5: Confirm total tracked file count is reasonable**
```bash
cd /home/agricidaniel/claude-obsidian
git ls-files | wc -l
git ls-files
```
Expected: ~94 files. Review list for anything unexpected.
---
## Task 2: Plugin Manifest Audit
**Files to read:** `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`
- [ ] **Step 1: Validate plugin.json**
```bash
python3 -c "import json; d=json.load(open('/home/agricidaniel/claude-obsidian/.claude-plugin/plugin.json')); print(json.dumps(d, indent=2))"
```
Check every field:
- `name` = `"claude-obsidian"` (exact, kebab-case, no spaces)
- `version` = `"1.2.0"`
- `description` — present, accurate, no "cosmic-brain" references
- `author.name` = `"AgriciDaniel"`
- `author.url` — valid GitHub URL
- `license` = `"MIT"`
- `homepage` — points to AgriciDaniel/claude-obsidian
- `repository` — points to AgriciDaniel/claude-obsidian
- `keywords` — array of relevant strings
- [ ] **Step 2: Validate marketplace.json**
```bash
python3 -c "import json; d=json.load(open('/home/agricidaniel/claude-obsidian/.claude-plugin/marketplace.json')); print(json.dumps(d, indent=2))"
```
Check:
- `owner.name` = `"AgriciDaniel"`
- `owner.url` = `"https://github.com/AgriciDaniel"` (no email field)
- `metadata.version` = `"1.2.0"`
- `plugins[0].name` = `"claude-obsidian"`
- `plugins[0].source.repo` = `"AgriciDaniel/claude-obsidian"`
- `plugins[0].version` = `"1.2.0"`
- `plugins[0].homepage` and `repository` both point to correct repo
- [ ] **Step 3: Version consistency across all files**
```bash
grep -r "\"version\"" /home/agricidaniel/claude-obsidian/.claude-plugin/ | grep -v ".git"
grep "version" /home/agricidaniel/claude-obsidian/README.md | head -5
grep "version" /home/agricidaniel/claude-obsidian/docs/install-guide.md | head -5
```
Expected: all version references say `1.2.0`.
---
## Task 3: Skill Files Audit
**Files:** `skills/wiki/SKILL.md`, `skills/wiki-ingest/SKILL.md`, `skills/wiki-query/SKILL.md`, `skills/wiki-lint/SKILL.md`, `skills/save/SKILL.md`, `skills/autoresearch/SKILL.md`, `skills/canvas/SKILL.md`
For **each** SKILL.md file, check:
### 3a. Frontmatter validity
- [ ] **Step 1: Read and validate all SKILL.md frontmatter**
```bash
for f in /home/agricidaniel/claude-obsidian/skills/*/SKILL.md; do
echo "=== $f ==="
python3 -c "
import sys
content = open('$f').read()
if not content.startswith('---'):
print('FAIL: no frontmatter')
sys.exit(1)
end = content.index('---', 3)
print(content[:end+3])
"
done
```
For each file, verify:
- `name:` field present and matches folder name
- `description:` field present, single line, triggers correctly describe when to use the skill
- `allowed-tools:` field present and is a valid YAML list
- No broken YAML (colons in values must be quoted)
### 3b. Tool list accuracy
- [ ] **Step 2: Check tool lists are reasonable for each skill**
Read each SKILL.md and verify `allowed-tools` lists only real Claude Code tools: `Read`, `Write`, `Edit`, `Bash`, `Glob`, `Grep`, `Agent`, `TodoWrite`, `WebFetch`, `WebSearch`.
Flag any tool listed that doesn't exist in Claude Code.
### 3c. Instruction completeness
- [ ] **Step 3: Read the body of each SKILL.md**
```bash
cat /home/agricidaniel/claude-obsidian/skills/wiki/SKILL.md
cat /home/agricidaniel/claude-obsidian/skills/wiki-ingest/SKILL.md
cat /home/agricidaniel/claude-obsidian/skills/wiki-query/SKILL.md
cat /home/agricidaniel/claude-obsidian/skills/wiki-lint/SKILL.md
cat /home/agricidaniel/claude-obsidian/skills/save/SKILL.md
cat /home/agricidaniel/claude-obsidian/skills/autoresearch/SKILL.md
cat /home/agricidaniel/claude-obsidian/skills/canvas/SKILL.md
```
For each, check:
- Does the body give Claude enough instruction to actually perform the operation?
- Are file paths referenced correct? (e.g. `wiki/index.md`, `wiki/log.md`, `wiki/hot.md`)
- Are any paths still referencing `cosmic-brain`?
- Are referenced `references/` files present on disk?
- Does `skills/wiki/SKILL.md` have a routing table covering all 7 operations?
- Does `skills/canvas/SKILL.md` reference `canvas-spec.md`?
- Does `skills/autoresearch/SKILL.md` reference `program.md`?
### 3d. Reference files
- [ ] **Step 4: Verify all reference files exist and are accurate**
```bash
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/plugins.md
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/css-snippets.md
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/mcp-setup.md
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/frontmatter.md
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/modes.md
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/git-setup.md
cat /home/agricidaniel/claude-obsidian/skills/wiki/references/rest-api.md
cat /home/agricidaniel/claude-obsidian/skills/canvas/references/canvas-spec.md
cat /home/agricidaniel/claude-obsidian/skills/autoresearch/references/program.md
```
Check each for:
- No `cosmic-brain` or `Nate Herk` references
- Plugin names match actual installed plugins (calendar, thino, excalidraw, banners)
- CSS snippet names match actual files in `.obsidian/snippets/`
- Any hardcoded paths still valid
---
## Task 4: Command Files Audit
**Files:** `commands/wiki.md`, `commands/save.md`, `commands/autoresearch.md`, `commands/canvas.md`
- [ ] **Step 1: Read all command files**
```bash
cat /home/agricidaniel/claude-obsidian/commands/wiki.md
cat /home/agricidaniel/claude-obsidian/commands/save.md
cat /home/agricidaniel/claude-obsidian/commands/autoresearch.md
cat /home/agricidaniel/claude-obsidian/commands/canvas.md
```
For each command file, check:
- Has YAML frontmatter with `description:` field
- Description accurately describes what the command does
- If it references a skill, does that skill exist? (`/wiki``skills/wiki/SKILL.md` etc.)
- No `cosmic-brain` references
- Commands match what README says they do (cross-check against README commands table)
---
## Task 5: Agent Files Audit
**Files:** `agents/wiki-ingest.md`, `agents/wiki-lint.md`
- [ ] **Step 1: Read both agent files**
```bash
cat /home/agricidaniel/claude-obsidian/agents/wiki-ingest.md
cat /home/agricidaniel/claude-obsidian/agents/wiki-lint.md
```
Check:
- YAML frontmatter present with `description:`
- Description accurately describes when Claude Code should invoke this agent
- Instructions match what the corresponding skill (`wiki-ingest`, `wiki-lint`) does
- File paths referenced in instructions are valid
---
## Task 6: Hooks Audit
**File:** `hooks/hooks.json`
- [ ] **Step 1: Validate JSON and check structure**
```bash
python3 -c "
import json
h = json.load(open('/home/agricidaniel/claude-obsidian/hooks/hooks.json'))
print(json.dumps(h, indent=2))
"
```
Check:
- Valid JSON (no parse errors)
- Event names are valid Claude Code hook events: `PreToolUse`, `PostToolUse`, `Stop`, `SubagentStop`, `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `PreCompact`, `Notification`
- `SessionStart` hook exists — should update hot cache at session start
- `SessionEnd` or `Stop` hook exists — should save/update hot cache at end
- Hook commands reference files that exist (check paths)
- `timeout` values are reasonable (not 0, not > 300)
- Hook type is `"command"` (valid type)
---
## Task 7: Obsidian Vault Config Audit
**Files:** `.obsidian/community-plugins.json`, `.obsidian/appearance.json`, `.obsidian/app.json`, `.obsidian/graph.json`, `.obsidian/workspace.json`, `.obsidian/workspace-visual.json`
- [ ] **Step 1: Validate all .obsidian JSON files**
```bash
for f in /home/agricidaniel/claude-obsidian/.obsidian/*.json; do
echo "=== $(basename $f) ==="
python3 -c "import json; json.load(open('$f')); print('VALID JSON')" 2>&1
done
```
- [ ] **Step 2: Check community-plugins.json**
```bash
cat /home/agricidaniel/claude-obsidian/.obsidian/community-plugins.json
```
Expected: exactly `["obsidian-excalidraw-plugin","obsidian-banners","calendar","thino"]` — 4 entries, no duplicates.
- [ ] **Step 3: Check appearance.json**
```bash
cat /home/agricidaniel/claude-obsidian/.obsidian/appearance.json
```
Expected: `enabledCssSnippets` contains exactly `["vault-colors","ITS-Dataview-Cards","ITS-Image-Adjustments"]`.
- [ ] **Step 4: Check app.json (userIgnoreFilters)**
```bash
cat /home/agricidaniel/claude-obsidian/.obsidian/app.json
```
Expected: `userIgnoreFilters` lists `agents/`, `commands/`, `hooks/`, `skills/`, `_templates/`, `README.md`, `CLAUDE.md`, `WIKI.md`, `Welcome.md`. These hide plugin infrastructure from Obsidian's file explorer.
- [ ] **Step 5: Check graph.json**
```bash
cat /home/agricidaniel/claude-obsidian/.obsidian/graph.json
```
Check: `"search": "path:wiki"` filter present, colorGroups defined for entities/concepts/sources/meta, `hideUnresolved: true`.
- [ ] **Step 6: Check workspace.json for stale references**
```bash
grep -n "cosmic-brain\|skool-hub\|Nate" /home/agricidaniel/claude-obsidian/.obsidian/workspace.json
grep -n "cover.gif" /home/agricidaniel/claude-obsidian/.obsidian/workspace.json
```
Expected: zero `cosmic-brain` or `skool-hub` hits. Any GIF reference should point to `claude-obsidian-gif-cover-16x9.gif`.
---
## Task 8: Obsidian Plugin Files Audit
**Files:** All files under `.obsidian/plugins/`
- [ ] **Step 1: Verify all 4 plugins have required files**
```bash
for plugin in calendar thino obsidian-excalidraw-plugin obsidian-banners; do
echo "=== $plugin ==="
ls /home/agricidaniel/claude-obsidian/.obsidian/plugins/$plugin/
done
```
Expected per plugin: `manifest.json`, `main.js`, `styles.css`. Calendar and Thino also have `data.json` (tracked intentionally).
- [ ] **Step 2: Validate all manifest.json files**
```bash
for plugin in calendar thino obsidian-excalidraw-plugin obsidian-banners; do
echo "=== $plugin ==="
python3 -c "
import json
m = json.load(open('/home/agricidaniel/claude-obsidian/.obsidian/plugins/$plugin/manifest.json'))
print(f'id={m.get(\"id\")} version={m.get(\"version\")} minAppVersion={m.get(\"minAppVersion\")}')
"
done
```
Check: each manifest has `id`, `name`, `version`, `minAppVersion`, `author` fields.
- [ ] **Step 3: Confirm excalidraw main.js is NOT tracked but IS on disk**
```bash
git -C /home/agricidaniel/claude-obsidian ls-files .obsidian/plugins/obsidian-excalidraw-plugin/main.js
ls -lh /home/agricidaniel/claude-obsidian/.obsidian/plugins/obsidian-excalidraw-plugin/main.js
```
Expected: `git ls-files` returns nothing (not tracked). `ls` shows the file exists on disk (~8MB).
---
## Task 9: CSS Snippets Audit
**Files:** `.obsidian/snippets/vault-colors.css`, `.obsidian/snippets/ITS-Dataview-Cards.css`, `.obsidian/snippets/ITS-Image-Adjustments.css`
- [ ] **Step 1: Read all 3 snippets**
```bash
cat /home/agricidaniel/claude-obsidian/.obsidian/snippets/vault-colors.css
cat /home/agricidaniel/claude-obsidian/.obsidian/snippets/ITS-Dataview-Cards.css
cat /home/agricidaniel/claude-obsidian/.obsidian/snippets/ITS-Image-Adjustments.css
```
Check:
- `vault-colors.css` — defines color variables for wiki folder types, dims plugin dirs. No broken selectors.
- `ITS-Dataview-Cards.css` — has GPL-2.0 attribution header (lines 1-4)
- `ITS-Image-Adjustments.css` — has GPL-2.0 attribution header (lines 1-4)
- No `cosmic-brain` or `skool-hub` references in any snippet
---
## Task 10: Wiki Content Audit
**Files:** All files in `wiki/`
### 10a. Core meta files
- [ ] **Step 1: Read and check wiki/index.md**
```bash
cat /home/agricidaniel/claude-obsidian/wiki/index.md
```
Check:
- Frontmatter valid YAML
- Concepts section: lists LLM Wiki Pattern, Hot Cache, Compounding Knowledge
- Entities section: lists Andrej Karpathy
- Questions section: lists "How does the LLM Wiki pattern work"
- Comparisons section: lists "Wiki vs RAG"
- Navigation links present
- [ ] **Step 2: Check wiki/hot.md**
```bash
cat /home/agricidaniel/claude-obsidian/wiki/hot.md
```
Check: updated to 2026-04-07, mentions claude-obsidian rename, no Nate Herk references, session link present.
- [ ] **Step 3: Check wiki/log.md**
```bash
cat /home/agricidaniel/claude-obsidian/wiki/log.md
```
Check: has v1.2.0 session entry at top, append-only format, no Nate Herk references.
- [ ] **Step 4: Check wiki/getting-started.md**
```bash
cat /home/agricidaniel/claude-obsidian/wiki/getting-started.md
```
Check: 3-step quick start accurate, commands table matches commands/ directory, links resolve.
- [ ] **Step 5: Check wiki/meta/dashboard.md Dataview queries**
```bash
cat /home/agricidaniel/claude-obsidian/wiki/meta/dashboard.md
```
Check: no references to `answer_quality` or `confidence` fields (these don't exist in seed pages). Queries use `status`, `updated`, `type` — fields that exist in seed page frontmatter.
### 10b. Wikilink resolution
- [ ] **Step 6: Extract all wikilinks and check they resolve**
```bash
python3 -c "
import os, re, glob
wiki_files = glob.glob('/home/agricidaniel/claude-obsidian/wiki/**/*.md', recursive=True)
all_titles = set()
for f in wiki_files:
title = os.path.splitext(os.path.basename(f))[0]
all_titles.add(title.lower())
broken = []
for f in wiki_files:
content = open(f).read()
links = re.findall(r'\[\[([^\]|#]+)', content)
for link in links:
link = link.strip()
if '/' in link:
# path-style link
full = '/home/agricidaniel/claude-obsidian/wiki/' + link + '.md'
if not os.path.exists(full) and not os.path.exists('/home/agricidaniel/claude-obsidian/wiki/' + link):
broken.append((f, link))
elif link.lower() not in all_titles:
broken.append((f, link))
if broken:
for f, l in broken:
print(f'BROKEN: {os.path.basename(f)} -> [[{l}]]')
else:
print('All wikilinks resolve')
"
```
### 10c. Canvas files
- [ ] **Step 7: Validate all canvas JSON files**
```bash
for f in /home/agricidaniel/claude-obsidian/wiki/canvases/*.canvas \
/home/agricidaniel/claude-obsidian/wiki/"Wiki Map.canvas"; do
echo "=== $(basename "$f") ==="
python3 -c "
import json
c = json.load(open('$f'))
nodes = c.get('nodes', [])
edges = c.get('edges', [])
print(f'{len(nodes)} nodes, {len(edges)} edges')
file_nodes = [n for n in nodes if n.get('type') == 'file']
for n in file_nodes:
print(f' file: {n[\"file\"]}')
"
done
```
For each file-type node, check the referenced file exists on disk.
### 10d. Seed page frontmatter
- [ ] **Step 8: Check frontmatter on all seed wiki pages**
```bash
for f in \
"/home/agricidaniel/claude-obsidian/wiki/concepts/LLM Wiki Pattern.md" \
"/home/agricidaniel/claude-obsidian/wiki/concepts/Hot Cache.md" \
"/home/agricidaniel/claude-obsidian/wiki/concepts/Compounding Knowledge.md" \
"/home/agricidaniel/claude-obsidian/wiki/entities/Andrej Karpathy.md" \
"/home/agricidaniel/claude-obsidian/wiki/questions/How does the LLM Wiki pattern work.md" \
"/home/agricidaniel/claude-obsidian/wiki/comparisons/Wiki vs RAG.md"; do
echo "=== $(basename "$f") ==="
python3 -c "
content = open('$f').read()
end = content.index('---', 3)
print(content[:end+3])
"
done
```
Verify each has: `type`, `title`, `updated`, `status`, `related` fields. Check `status` is one of: `seed`, `developing`, `mature`, `evergreen`.
---
## Task 11: Documentation Accuracy Audit
### 11a. README
- [ ] **Step 1: Check README image references all resolve**
```bash
python3 -c "
import re, os
readme = open('/home/agricidaniel/claude-obsidian/README.md').read()
imgs = re.findall(r'src=\"([^\"]+)\"', readme)
for img in imgs:
path = '/home/agricidaniel/claude-obsidian/' + img
exists = os.path.exists(path)
print(f'{'PASS' if exists else 'FAIL'}: {img}')
"
```
- [ ] **Step 2: Check all install commands in README are accurate**
```bash
grep -n "claude plugin install\|git clone\|bash bin/" /home/agricidaniel/claude-obsidian/README.md
```
Verify:
- `claude plugin install github:AgriciDaniel/claude-obsidian` — correct
- `git clone https://github.com/AgriciDaniel/claude-obsidian` — correct
- `bash bin/setup-vault.sh` — script exists and is executable
- [ ] **Step 3: Check commands table in README matches actual commands/ directory**
```bash
grep -A2 "| \`/wiki\`\|ingest\|/save\|/autoresearch\|/canvas\|lint\|hot cache" /home/agricidaniel/claude-obsidian/README.md
ls /home/agricidaniel/claude-obsidian/commands/
```
Every command listed in README should have a corresponding file in `commands/`.
- [ ] **Step 4: Check plugins section in README matches actual installed plugins**
```bash
grep -A4 "Pre-installed\|pre-installed" /home/agricidaniel/claude-obsidian/README.md | head -30
cat /home/agricidaniel/claude-obsidian/.obsidian/community-plugins.json
```
Verify plugin names in README match community-plugins.json.
### 11b. setup-vault.sh
- [ ] **Step 5: Validate setup-vault.sh syntax and content**
```bash
bash -n /home/agricidaniel/claude-obsidian/bin/setup-vault.sh && echo "SYNTAX OK"
cat /home/agricidaniel/claude-obsidian/bin/setup-vault.sh
```
Check:
- `bash -n` reports no syntax errors
- `set -euo pipefail` present (safe scripting)
- Writes `graph.json`, `app.json`, `appearance.json` — are the values written still accurate?
- Downloads Excalidraw from correct URL (zsviczian's repo, `releases/latest`)
- Success message lists all 4 plugins and 3 CSS snippets
### 11c. docs/install-guide.md
- [ ] **Step 6: Check install guide accuracy**
```bash
cat /home/agricidaniel/claude-obsidian/docs/install-guide.md
```
Check:
- Version in header says `1.2.0`
- Install commands match README
- Plugin table matches installed plugins
- No `cosmic-brain` references
- `docs/install-guide.pdf` exists
```bash
ls -lh /home/agricidaniel/claude-obsidian/docs/install-guide.pdf
```
### 11d. WIKI.md
- [ ] **Step 7: Check WIKI.md for stale references**
```bash
grep -n "cosmic-brain\|Nate Herk\|nateherk" /home/agricidaniel/claude-obsidian/WIKI.md | head -10
```
Note: WIKI.md is gitignored so stale content there doesn't affect the repo, but flag it.
### 11e. CLAUDE.md
- [ ] **Step 8: Check CLAUDE.md accuracy**
```bash
cat /home/agricidaniel/claude-obsidian/CLAUDE.md
```
Check:
- Plugin name is `claude-obsidian`
- No placeholder text remaining
- Skill trigger phrases match actual skill descriptions
- No `cosmic-brain` references
---
## Task 12: Cross-File Consistency + Security
### 12a. Name and URL consistency
- [ ] **Step 1: Scan all tracked files for any remaining cosmic-brain references**
```bash
cd /home/agricidaniel/claude-obsidian
git ls-files | xargs grep -l "cosmic-brain\|Cosmic Brain" 2>/dev/null
```
Expected: zero results (or only historical/contextual in wiki session notes).
- [ ] **Step 2: Check all repo URLs point to AgriciDaniel/claude-obsidian**
```bash
cd /home/agricidaniel/claude-obsidian
git ls-files | xargs grep -h "github.com/AgriciDaniel\|github.com/avalonreset" 2>/dev/null | sort -u
```
Expected: all URLs use `AgriciDaniel/claude-obsidian` or `avalonreset-pro/claude-obsidian`. No `cosmic-brain` in any URL.
### 12b. Security scan
- [ ] **Step 3: Scan for potential secrets or sensitive data**
```bash
cd /home/agricidaniel/claude-obsidian
git ls-files | xargs grep -il "api.key\|apikey\|api_key\|secret\|password\|token\|bearer\|sk-\|ghp_\|OBSIDIAN_API" 2>/dev/null
```
For any matches: read the file and confirm values are placeholders, not real credentials.
- [ ] **Step 4: Check Obsidian plugin data.json files for personal data**
```bash
cat /home/agricidaniel/claude-obsidian/.obsidian/plugins/calendar/data.json
cat /home/agricidaniel/claude-obsidian/.obsidian/plugins/thino/data.json
```
Verify: no personal notes, tokens, or private data — only plugin settings (weekStart, locale, etc.).
### 12c. Plugin install simulation
- [ ] **Step 5: Verify plugin install path would work**
The command `claude plugin install github:AgriciDaniel/claude-obsidian` works by:
1. Fetching the repo
2. Reading `.claude-plugin/plugin.json`
3. Loading `skills/*/SKILL.md`, `commands/*.md`, `agents/*.md`, `hooks/hooks.json`
Simulate this by confirming:
```bash
# All skills discoverable
ls /home/agricidaniel/claude-obsidian/skills/*/SKILL.md
# All commands discoverable
ls /home/agricidaniel/claude-obsidian/commands/*.md
# All agents discoverable
ls /home/agricidaniel/claude-obsidian/agents/*.md
# Hooks valid
python3 -c "import json; json.load(open('/home/agricidaniel/claude-obsidian/hooks/hooks.json')); print('hooks.json VALID')"
# Plugin manifest readable
python3 -c "import json; d=json.load(open('/home/agricidaniel/claude-obsidian/.claude-plugin/plugin.json')); print(f'Plugin: {d[\"name\"]} v{d[\"version\"]}')"
```
---
## Task 13: Compile Audit Report
- [ ] **Step 1: Write AUDIT-REPORT.md**
Create `/home/agricidaniel/claude-obsidian/docs/AUDIT-REPORT.md` with:
- Date: 2026-04-07
- Summary table: area → PASS/WARN/FAIL + one-line note
- Details section per area with all findings
- Recommended fixes section (issues only, no changes made)
Format:
```markdown
# claude-obsidian Audit Report
Date: 2026-04-07
## Summary
| Area | Status | Note |
|------|--------|------|
| 1. Git health | PASS/WARN/FAIL | ... |
...
## Findings
### Area 1: Git Health
...
## Recommended Fixes
1. ...
```
---
## Self-Review
**Spec coverage:**
- Plugin manifest ✓ (Task 2)
- All 7 skills ✓ (Task 3)
- All 4 commands ✓ (Task 4)
- Both agents ✓ (Task 5)
- Hooks ✓ (Task 6)
- Obsidian config ✓ (Task 7)
- Obsidian plugins ✓ (Task 8)
- CSS snippets ✓ (Task 9)
- Wiki content + wikilinks + canvases ✓ (Task 10)
- README + install guide + setup script + CLAUDE.md ✓ (Task 11)
- Cross-file consistency + security + install simulation ✓ (Task 12)
- Report generation ✓ (Task 13)
**No placeholders:** All steps have exact commands with expected output.
**Read-only confirmed:** Zero write operations in any task except Task 13 (report file).

View File

@@ -8,6 +8,7 @@ description: >
Triggers on: "/autoresearch", "autoresearch", "research [topic]", "deep dive into [topic]", Triggers on: "/autoresearch", "autoresearch", "research [topic]", "deep dive into [topic]",
"investigate [topic]", "find everything about [topic]", "research and file", "investigate [topic]", "find everything about [topic]", "research and file",
"go research", "build a wiki on". "go research", "build a wiki on".
allowed-tools: Read Write Edit Glob Grep WebFetch WebSearch
--- ---
# autoresearch: Autonomous Research Loop # autoresearch: Autonomous Research Loop

View File

@@ -1,6 +1,7 @@
--- ---
name: canvas name: canvas
description: "Visual layer of the wiki. Add images, text cards, PDFs, and wiki pages to Obsidian canvas files with auto-positioning inside zones. Integrates with /banana for image capture. Triggers on: /canvas, canvas new, canvas add image, canvas add text, canvas add pdf, canvas add note, canvas zone, canvas list, canvas from banana, add to canvas, put this on the canvas, open canvas, create canvas." description: "Visual layer of the wiki. Add images, text cards, PDFs, and wiki pages to Obsidian canvas files with auto-positioning inside zones. Integrates with /banana for image capture. Triggers on: /canvas, canvas new, canvas add image, canvas add text, canvas add pdf, canvas add note, canvas zone, canvas list, canvas from banana, add to canvas, put this on the canvas, open canvas, create canvas."
allowed-tools: Read Write Edit Glob Grep
--- ---
# canvas: Visual Reference Layer # canvas: Visual Reference Layer
@@ -10,7 +11,7 @@ The three knowledge capture layers:
- `/autoresearch` → structured knowledge (wiki/sources/, wiki/concepts/) - `/autoresearch` → structured knowledge (wiki/sources/, wiki/concepts/)
- `/canvas` → visual references (wiki/canvases/) - `/canvas` → visual references (wiki/canvases/)
A canvas is a JSON file Obsidian renders as an infinite visual board. This skill reads and writes canvas JSON directly. Read `references/canvas-spec.md` for the full format reference before making any edits. This spec aligns with the [JSON Canvas open standard](https://jsoncanvas.org/). If `kepano/obsidian-skills` is installed, its `json-canvas` skill is the authoritative cross-platform reference. A canvas is a JSON file Obsidian renders as an infinite visual board. This skill reads and writes canvas JSON directly. Read `references/canvas-spec.md` for the full format reference before making any edits. This spec aligns with the [JSON Canvas open standard](https://jsoncanvas.org/). If the kepano/obsidian-skills plugin is installed, its json-canvas skill is the authoritative canvas spec reference. Otherwise, use the guidance below.
--- ---
@@ -172,7 +173,7 @@ wiki/canvases/design-ideas.canvas. 42 nodes (30 images, 4 text, 8 groups)
--- ---
### from banana (`/canvas from banana`) ### from banana (`/canvas from banana`) (if the banana-claude plugin is installed)
1. Check `wiki/canvases/.recent-images.txt` first (session log of newly written images). 1. Check `wiki/canvases/.recent-images.txt` first (session log of newly written images).
2. If not found or empty: use `find` with correct precedence (parentheses required. Without them `-newer` only binds to the last `-name` clause): 2. If not found or empty: use `find` with correct precedence (parentheses required. Without them `-newer` only binds to the last `-name` clause):
@@ -252,7 +253,7 @@ If `wiki/canvases/.recent-images.txt` exists, append any new image path written
--- ---
## Banana Integration ## Banana Integration (if the banana-claude plugin is installed)
After any `/banana` run in the same session, if the user says "add to canvas" or "put on canvas", treat it as `/canvas from banana`. After any `/banana` run in the same session, if the user says "add to canvas" or "put on canvas", treat it as `/canvas from banana`.

View File

@@ -1,6 +1,7 @@
--- ---
name: defuddle name: defuddle
description: "Strip clutter from web pages before ingesting into the wiki. Removes ads, navigation, headers, footers, and boilerplate: leaving clean readable markdown that saves 40-60% tokens. Triggers on: defuddle, clean this page, strip this url, fetch and clean, clean web content before ingesting." description: "Strip clutter from web pages before ingesting into the wiki. Removes ads, navigation, headers, footers, and boilerplate: leaving clean readable markdown that saves 40-60% tokens. Triggers on: defuddle, clean this page, strip this url, fetch and clean, clean web content before ingesting, strip ads, remove clutter, clean URL content, readable markdown from URL."
allowed-tools: Read Bash
--- ---
# defuddle: Web Page Cleaner # defuddle: Web Page Cleaner

View File

@@ -1,13 +1,14 @@
--- ---
name: obsidian-bases name: obsidian-bases
description: "Create and edit Obsidian Bases (.base files): Obsidian's native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Triggers on: create a base, add a base file, obsidian bases, base view, filter notes, formula, database view, dynamic table, task tracker base, reading list base." description: "Create and edit Obsidian Bases (.base files): Obsidian's native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Triggers on: create a base, add a base file, obsidian bases, base view, filter notes, formula, database view, dynamic table, task tracker base, reading list base."
allowed-tools: Read Write
--- ---
# obsidian-bases: Obsidian's Database Layer # obsidian-bases: Obsidian's Database Layer
Obsidian Bases (launched 2025) turns vault notes into queryable, dynamic views. Tables, cards, lists, maps. Defined in `.base` files. No plugin required; it is a core Obsidian feature. Obsidian Bases (launched 2025) turns vault notes into queryable, dynamic views. Tables, cards, lists, maps. Defined in `.base` files. No plugin required; it is a core Obsidian feature.
**Authoritative reference**: `kepano/obsidian-skills` publishes the canonical `obsidian-bases` skill with full syntax and function reference. Use this skill alongside that one. Official docs: https://help.obsidian.md/bases/syntax **Authoritative reference**: If the kepano/obsidian-skills plugin is installed, prefer its canonical obsidian-bases skill. Otherwise, use the reference below. Official docs: https://help.obsidian.md/bases/syntax
--- ---

View File

@@ -1,13 +1,14 @@
--- ---
name: obsidian-markdown name: obsidian-markdown
description: "Write correct Obsidian Flavored Markdown: wikilinks, embeds, callouts, properties, tags, highlights, math, and canvas syntax. Reference this when creating or editing any wiki page. Triggers on: write obsidian note, obsidian syntax, wikilink, callout, embed, obsidian markdown." description: "Write correct Obsidian Flavored Markdown: wikilinks, embeds, callouts, properties, tags, highlights, math, and canvas syntax. Reference this when creating or editing any wiki page. Triggers on: write obsidian note, obsidian syntax, wikilink, callout, embed, obsidian markdown, wikilink format, callout syntax, embed syntax, obsidian formatting, how to write obsidian markdown."
allowed-tools: Read Write Edit
--- ---
# obsidian-markdown: Obsidian Flavored Markdown # obsidian-markdown: Obsidian Flavored Markdown
Reference this skill when writing any wiki page. Obsidian extends standard Markdown with wikilinks, embeds, callouts, and properties. Getting syntax wrong causes broken links, invisible callouts, or malformed frontmatter. Reference this skill when writing any wiki page. Obsidian extends standard Markdown with wikilinks, embeds, callouts, and properties. Getting syntax wrong causes broken links, invisible callouts, or malformed frontmatter.
**Cross-reference**: `kepano/obsidian-skills` publishes the authoritative cross-platform version of this skill at [github.com/kepano/obsidian-skills](https://github.com/kepano/obsidian-skills). If installed, that skill is the canonical reference. Use it alongside this one. **Cross-reference**: If the kepano/obsidian-skills plugin is installed, prefer its canonical obsidian-markdown skill for authoritative Obsidian syntax reference. Otherwise, use the reference below. See also [github.com/kepano/obsidian-skills](https://github.com/kepano/obsidian-skills).
--- ---

View File

@@ -7,6 +7,7 @@ description: >
Triggers on: "save this", "save that answer", "/save", "file this", Triggers on: "save this", "save that answer", "/save", "file this",
"save to wiki", "save this session", "file this conversation", "keep this", "save to wiki", "save this session", "file this conversation", "keep this",
"save this analysis", "add this to the wiki". "save this analysis", "add this to the wiki".
allowed-tools: Read Write Edit Glob Grep
--- ---
# save: File Conversations Into the Wiki # save: File Conversations Into the Wiki

View File

@@ -1,13 +1,14 @@
--- ---
name: wiki-ingest name: wiki-ingest
description: "Ingest sources into the Obsidian wiki vault. Reads a source, extracts entities and concepts, creates or updates wiki pages, cross-references, and logs the operation. Supports files, URLs, and batch mode. Triggers on: ingest, process this source, add this to the wiki, read and file this, batch ingest, ingest all of these, ingest this url." description: "Ingest sources into the Obsidian wiki vault. Reads a source, extracts entities and concepts, creates or updates wiki pages, cross-references, and logs the operation. Supports files, URLs, and batch mode. Triggers on: ingest, process this source, add this to the wiki, read and file this, batch ingest, ingest all of these, ingest this url."
allowed-tools: Read Write Edit Glob Grep Bash WebFetch
--- ---
# wiki-ingest: Source Ingestion # wiki-ingest: Source Ingestion
Read the source. Write the wiki. Cross-reference everything. A single source typically touches 8-15 wiki pages. Read the source. Write the wiki. Cross-reference everything. A single source typically touches 8-15 wiki pages.
**Syntax standard**: Write all Obsidian Markdown using proper Obsidian Flavored Markdown. Wikilinks as `[[Note Name]]`, callouts as `> [!type] Title`, embeds as `![[file]]`, properties as YAML frontmatter. If kepano/obsidian-skills is installed, its `obsidian-markdown` skill is the authoritative syntax reference. **Syntax standard**: Write all Obsidian Markdown using proper Obsidian Flavored Markdown. Wikilinks as `[[Note Name]]`, callouts as `> [!type] Title`, embeds as `![[file]]`, properties as YAML frontmatter. If the kepano/obsidian-skills plugin is installed, prefer its canonical obsidian-markdown skill for Obsidian syntax reference. Otherwise, follow the guidance in this skill.
--- ---

View File

@@ -5,6 +5,7 @@ description: >
missing cross-references, frontmatter gaps, and empty sections. Creates or updates missing cross-references, frontmatter gaps, and empty sections. Creates or updates
Dataview dashboards. Generates canvas maps. Triggers on: "lint", "health check", Dataview dashboards. Generates canvas maps. Triggers on: "lint", "health check",
"clean up wiki", "check the wiki", "wiki maintenance", "find orphans", "wiki audit". "clean up wiki", "check the wiki", "wiki maintenance", "find orphans", "wiki audit".
allowed-tools: Read Write Edit Glob Grep
--- ---
# wiki-lint: Wiki Health Check # wiki-lint: Wiki Health Check

View File

@@ -1,6 +1,7 @@
--- ---
name: wiki-query name: wiki-query
description: "Answer questions using the Obsidian wiki vault. Reads hot cache first, then index, then relevant pages. Synthesizes answers with citations. Files good answers back as wiki pages. Supports quick, standard, and deep modes. Triggers on: what do you know about, query:, what is, explain, summarize, find in wiki, search the wiki, based on the wiki, wiki query quick, wiki query deep." description: "Answer questions using the Obsidian wiki vault. Reads hot cache first, then index, then relevant pages. Synthesizes answers with citations. Files good answers back as wiki pages. Supports quick, standard, and deep modes. Triggers on: what do you know about, query:, what is, explain, summarize, find in wiki, search the wiki, based on the wiki, wiki query quick, wiki query deep."
allowed-tools: Read Glob Grep
--- ---
# wiki-query: Query the Wiki # wiki-query: Query the Wiki

View File

@@ -7,6 +7,7 @@ description: >
Triggers on: "set up wiki", "scaffold vault", "create knowledge base", "/wiki", Triggers on: "set up wiki", "scaffold vault", "create knowledge base", "/wiki",
"wiki setup", "obsidian vault", "knowledge base", "second brain setup", "wiki setup", "obsidian vault", "knowledge base", "second brain setup",
"running notetaker", "persistent memory", "llm wiki". "running notetaker", "persistent memory", "llm wiki".
allowed-tools: Read Write Edit Glob Grep Bash
--- ---
# wiki: Claude + Obsidian Knowledge Companion # wiki: Claude + Obsidian Knowledge Companion