Round 2 of Obsidian scanner fixes:
- Timer functions: window.setTimeout/clearTimeout (per scanner) instead of activeWindow.*
- utils/shell.ts: window.require instead of globalThis.require for Electron access
- Rename options.global -> options.globalInstall to bypass false-positive linter warning
- CSS: remove 8 !important rules via specificity bumps; merge 3 duplicate selectors
- eslint config: hoist ignores block (web/, assets/, scripts/, main.js)
Release workflow:
- .github/workflows/release.yml triggers on semver tag push
- Builds, signs main.js/manifest.json/styles.css with GitHub OIDC attestation
- Creates or updates release with the three signed assets
Surface deep link as primary install path:
- README + landing CTAs: "Open in Obsidian" (obsidian://show-plugin?id=agentfiles) primary, community page secondary
- Docs Installation: deep link first, community page as scorecard-first alternative
Swap plain textarea for standalone CM6 instance with line numbers,
syntax highlighting, fold gutters, and spec-compliant frontmatter
linting. Proper lifecycle cleanup on skill switch to prevent DOM leaks.
- Add sort toggle (recent/messages) and date range filter (1d/7d/30d/90d/all)
- Add tag multi-select dropdown with outside-click dismiss
- Move tag filtering from sidebar to inline toolbar
- Remove sidebar Tags section (now accessible via dropdown)
- Default to "today" date range on open
- Fix layout shift: render all 3 action buttons always, disable tag when loading
- Fix dropdown mutex: only one dropdown open at a time
Add CSS for conversation UI components: date group headers, conversation
cards with project badges and tag pills, message bubbles with role
indicators, selection state, tool call badges, save-to-vault bar,
resume command block, and custom tag input. Follows existing design
system using Obsidian CSS variables.
- Replace 3 confusing icon buttons with 2 clear controls
- Deep search toggle: uses safe "file-search" icon, clear active state
- Filter+sort merged into one "sliders-horizontal" button that opens
Obsidian's native Menu with checkmarks for sort mode and filter
- Button highlights when filter or non-default sort is active
- Removes custom dropdown CSS in favor of native Menu component
- Fixes invisible icon bug (arrow-down-a-z not in all Obsidian versions)
Create modal now uses a 3-step flow:
1. Tool grid with real SVG icons and brand colors
2. Type cards (skill/command/agent) - skipped if tool has only one type
3. Name input with tool badge, monospace input, colored submit button
Also adds Amp (3 lightning bolts from official press kit) and
Antigravity (Google "A" arch shape) SVG icons to tool-icons.
- New "Create" button in sidebar below Marketplace
- Modal with name input + target dropdown (agent + type)
- Creates SKILL.md in directory for skills, flat .md for commands
- Auto-refreshes store and selects the new skill after creation
- Slugifies name for filesystem, validates for duplicates
Closes#17
Add a deep search toggle button in the search bar that controls whether
search includes description and/or file content beyond just the name.
- Default off (matching upstream name-only search behavior)
- Settings: "Deep search by default" toggle + "Deep search scope" dropdown
(description only / file content only / both)
- Toggle button sits alongside existing filter and sort buttons
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Main uses fixed-width columns (200px / 280px / 1fr). This adds
draggable resize handles between panels so users can adjust widths
to their preference, with min/max constraints (sidebar 120–400px,
list 180–600px).
Improvements over main:
- CSS-variable-driven 5-column grid replaces hardcoded 3-column
- Drag lifecycle management cleans up listeners on view switch
- CSS class toggling (.as-hidden) instead of inline style manipulation
- 6px handle width for a comfortable grab target
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a NamingMode setting that controls how skill names are derived:
- "auto" (default): uses frontmatter name, then H1 heading, then filename
- "filename": always uses the filename, ignoring frontmatter/headings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Main prevents text selection in the detail toolbar and body,
making it impossible to copy skill content, metadata, or file
paths. This adds user-select: text and cursor: text so users
can select and copy any text in the detail view.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace execSync with exec (callback) for install, uninstall, update
- UI stays responsive during skill operations
- List cards update installed badge after install/uninstall
- Fix MarkdownRenderer Component warning (use real Component instance)
- Force padding-left: 0 on setting headings with !important
Detail panel enriched with per-skill insights:
- Warnings section: oversized (>500 lines), long descriptions (>1024 chars), conflict alerts
- Usage section: use count + last used + 30d sparkline chart
- Traces section: last 5 executions with model, tokens, cost, duration
- Conflicts section: overlapping skills with similarity bar
- Prune action: remove stale skills with confirmation dialog
Dashboard:
- Scan sessions button in overview header
List panel:
- New badges: oversized, conflict
All data from skillkit CLI --json (conflicts, trace --list, health).
Requires skillkit >= 0.8.0 for trace --list --json and prune --skill.
- Remove require("fs") in tool-configs, use existing import
- Replace all style.display with CSS class toggle (as-hidden)
- Replace all element.style.* with setCssProps and CSS variables
- Remove plugin name from settings heading
- Fix unknown | null type to proper union
- Fix unused spinner variable
- Use sentence case for settings UI text
- Fix value stringification for objects in frontmatter
- Dashboard view with Overview, Top Skills, Health, Burn Rate, Context Tax, and Stale Skills sections
- All data sourced from skillkit CLI --json (no direct DB queries)
- Usage badges on skill cards: use count, stale, heavy
- Detail panel shows usage stats when skillkit available
- Sidebar CTA for users without skillkit installed
- Skillkit integration uses proper CLI interface (stats/health/burn/context --json)
Discover, organize, and edit AI coding agent skills across Claude Code,
Cursor, Codex, Windsurf, Copilot, and more from inside Obsidian.
- Multi-tool skill discovery (13 tools supported)
- Three-column view: sidebar, list, detail
- Real-time file watching with debounce
- YAML frontmatter parsing and metadata display
- Built-in editor with Cmd+S save
- Full-text search across all skills
- Token/char count estimation
- Real SVG logos from tryelements.dev registry
- Filter by tool, type, favorites, collections