portfolio-taxonomy
Portfolio Taxonomy
Core Concept
Plugin root resolution. Bash invocations below resolve the plugin root inline as ${CLAUDE_PLUGIN_ROOT:-$(ls -td "$HOME"/.claude/plugins/cache/insight-wave/cogni-portfolio/*/ | head -1)} — the first call works whether or not the harness injects $CLAUDE_PLUGIN_ROOT. Keep the inline form in every call; do not strip it.
cogni-portfolio ships 8 industry taxonomy templates — b2b-ict, b2b-saas, b2b-fintech, b2b-healthtech, b2b-martech, b2b-industrial-tech, b2b-professional-services, b2b-opensource. Each one is a 7-file bundle that drives portfolio-scan (search patterns, category tables) and maps discovered offerings to products and features via the product-template contract.
A taxonomy works best when it matches the industry you are scanning. Often the bundled 8 are close enough; sometimes they are not. This skill is how the user takes ownership of the taxonomy — clones a bundled one to edit, authors a new one, imports one from an external reference model, or maintains an existing project-local taxonomy through inspect, edit, validate, and export operations. The customized taxonomy lives inside the portfolio project at {PROJECT_PATH}/taxonomy/ — it is not shared across projects (unless explicitly exported), it is not written back to the plugin, and it survives plugin updates because it is part of the project's own data.
Resolver precedence (used by cogni-portfolio:portfolio-scan Phase 0 and cogni-portfolio:portfolio-setup Step 5):
- If
{PROJECT_PATH}/taxonomy/exists → use it (project-local wins) - Else if
portfolio.jsonhastaxonomy.type→ load$CLAUDE_PLUGIN_ROOT/templates/{type}/ - Else run the industry-match fallback against bundled templates
Project-local ownership means the user can safely edit {PROJECT_PATH}/taxonomy/template.md, categories.json, search-patterns.md, and the rest without worrying about plugin updates reverting their changes.