plugins/qmd/skills/configure/SKILL.md
Configure or reconfigure qmd collections for this project. Triggers on "configure qmd", "set up qmd", "reconfigure qmd", "qmd setup".
npx skillsauth add aviflombaum/claude-code-in-avinyc avinyc:qmd-configureInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Interactive interview to set up or reconfigure qmd collections for a project. Idempotent: works for both first-time setup and reconfiguration.
Run this flow step by step. Do NOT skip steps or assume answers.
command -v qmd
If missing, tell the user:
qmd is not installed. Install it with:
npm install -g @tobilu/qmd
Then STOP.
The search skill uses qmd's MCP tools for best performance (models stay warm between queries). Check if the MCP server is configured:
cat .mcp.json 2>/dev/null | grep -q '"qmd"' && echo "found in project" || echo "not in project"
If not configured, tell the user:
qmd MCP server is not configured. Add it for the best search experience.
Option 1 — CLI (recommended):
claude mcp add qmd -- qmd mcpOption 2 — Manual: Add to
.mcp.jsonin the project root:{ "mcpServers": { "qmd": { "command": "qmd", "args": ["mcp"] } } }The search skill will fall back to CLI if MCP isn't available, but MCP is significantly faster for repeated queries.
Continue with setup regardless — MCP is recommended but not required.
Get the git repo folder name and normalize it:
basename "$(git rev-parse --show-toplevel)" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/_/g; s/__*/_/g; s/^_//; s/_$//'
Show the derived name to the user via AskUserQuestion. Let them confirm or type a custom name. Once confirmed, this is the canonical project name used for all collection prefixes.
Find directories containing markdown files:
find . -maxdepth 2 -type f -name "*.md" -exec dirname {} \; | sort -u
From the output, select only directories useful for a searchable document collection (docs/, plans/, tasks/, etc.). Ignore tmp/, vendor/, node_modules/, and other project cruft.
Use AskUserQuestion with multiSelect: true. List indexable directories as options. Explain that each directory becomes a qmd collection for fast semantic search.
If no candidate directories were found, ask the user to type custom directory paths.
For each selected directory, use AskUserQuestion to:
**/*.md, offer alternatives like **/*.{md,txt})For each selected directory, derive the collection name: {project}_{dirname} where dirname has / and . replaced with _ and leading dots stripped. Example: .cursor/rules → cursor_rules, so collection is myproject_cursor_rules.
Get the absolute path to the directory:
echo "$(git rev-parse --show-toplevel)/<dirname>"
Then add the collection:
qmd collection add "<absolute_path>" --name "<collection_name>" --mask "<pattern>"
qmd context add "qmd://<collection_name>/" "<description>"
If qmd collection add fails (collection already exists), ask the user whether to overwrite. If yes:
qmd collection remove "<collection_name>"
qmd collection add "<absolute_path>" --name "<collection_name>" --mask "<pattern>"
qmd context add "qmd://<collection_name>/" "<description>"
Use the Write tool to create .claude/qmd.json:
{
"project": "<project_name>",
"collections": {
"<project>_<dirname>": {
"path": "<relative-dir-path>",
"pattern": "**/*.md",
"description": "<user-provided description>"
}
},
"gitHook": false
}
qmd update && qmd embed
Tell the user it's generating embeddings. This may take a moment for large collections.
Use AskUserQuestion: "Install a git post-commit hook? When enabled, committing changes to .md files will automatically re-index in the background so search results stay fresh."
Options: "Yes, install hook" / "No, skip"
If yes, install the hook by appending to .git/hooks/post-commit (create the file if needed, ensure it's executable):
# qmd-auto-index:<project_name>
# Auto-update qmd index when markdown files change
export PATH="$HOME/.bun/bin:$HOME/.local/bin:$PATH"
if command -v qmd &>/dev/null; then
if git diff-tree --no-commit-id --name-only -r HEAD | grep -q '\.md$'; then
(qmd update && qmd embed) &>/dev/null &
fi
fi
Check for the marker comment # qmd-auto-index:<project_name> first to avoid duplicates. Update .claude/qmd.json to set "gitHook": true.
Show the user:
/avinyc:qmd-search <query>/avinyc:qmd-configure/avinyc:qmd-status/avinyc:qmd-doctordevelopment
Bootstrap Warp terminal configuration for Rails projects. Creates launch configurations with colored tabs for dev server, Claude, shell, and more. This skill should be used when setting up Warp for a Rails project. Triggers on "setup warp", "configure warp", "warp rails", "warp bootstrap", "terminal setup for rails", "warp-rails".
development
Write technical blog posts, tutorials, and documentation in Flatiron School's engaging style. Use for explaining code patterns, debugging stories, or turning complex topics into clear narratives. Triggers on "write a blog post", "tutorial about", "explain how", "technical writing".
data-ai
Marketing funnel modeling and conversion metrics. Use for ad spend analysis, CPM/CPC optimization, landing page conversions, waitlist economics, and funnel modeling. Triggers on "ad spend", "cpm", "cpc", "conversion rate", "landing page", "waitlist", "funnel".
testing
SaaS unit economics and growth strategy. Use for LTV, CAC, MRR/ARR analysis, payback period, churn analysis, Rule of 40, and SaaS financial modeling. Triggers on "unit economics", "ltv", "cac", "mrr", "arr", "churn", "saas metrics".