From cogni-portfolio
Scaffolds a cogni-portfolio project with company context and directory structure for product/market messaging work.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cogni-portfolio:portfolio-setupThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Initialize a cogni-portfolio project by capturing company context and creating the project directory structure.
Initialize a cogni-portfolio project by capturing company context and creating the project directory structure.
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.
A portfolio project is the container for all downstream work — products, features, markets, propositions, competitors, and customers all live inside it. Setup captures the minimum viable company context (name, description, industry, products) and scaffolds the directory structure that every other skill depends on.
Getting this right matters because the company context in portfolio.json informs every downstream skill. A clear description and accurate industry help the products, markets, and propositions skills generate relevant, on-target output instead of generic filler. A few minutes of care here saves hours of correction later.
If a project already exists for the company (an existing cogni-portfolio/<slug>/portfolio.json matching the company), do not create a duplicate. Briefly acknowledge that the project exists and dispatch the portfolio-resume skill via the Skill tool so the user lands on the status dashboard instead of having to re-invoke a command. The two skills bridge to each other in both directions, so users can enter from either side and reach the right place.
The goal is to fill four fields (company name, description, industry, products) with minimal questions. Read available data first, then ask only for what's missing.
.workspace-config.json exists in the workspace root. If it contains a language field, lowercase it and use as the portfolio language (e.g., "DE" → "de").uploads/ for existing documents (strategy decks, lean canvases, pitch decks). Their presence means the user has data you can work with.Instead of asking for name, description, industry, and products separately, ask what the user can share:
"To get started, what can you share? A company website URL is ideal — I can extract most of what I need from it. Documents (strategy decks, lean canvases, pitch decks) in
uploads/also work great. Or just tell me the company name and I'll work from there."
If the user already provided a URL or company name in their initial message, skip this question and proceed directly to Step 1c.
portfolio-canvas skill handles this, but you can extract company-level context directly).Present your findings as testable assumptions: "From your website, I see Acme Cloud Services is a cloud infrastructure company offering X, Y, Z. Correct me if any of this is off."
If web research or documents filled name, description, and industry, don't re-ask — just confirm. Only ask for fields that no data source could answer. If no language was detected from workspace config, ask which language to use for generated content (default: "en").
Present the gathered context as a summary for confirmation before creating anything:
| Field | Value |
|---|---|
| Company | Acme Cloud Services |
| Description | Cloud infrastructure management for mid-market SaaS |
| Industry | Cloud Infrastructure |
| Products | Cloud Platform, Monitoring Suite |
| Proposed slug | acme-cloud |
| Language | de (from workspace config) |
The slug is derived from the company name in kebab-case — keep it short and recognizable (e.g., "Acme Cloud Services" -> acme-cloud).
Ask: "Correct anything that's off, or confirm to proceed."
Iterate until the user confirms. They know their business best.
Run the init script to create the directory structure:
bash "${CLAUDE_PLUGIN_ROOT:-$(ls -td "$HOME"/.claude/plugins/cache/insight-wave/cogni-portfolio/*/ | head -1)}/scripts/project-init.sh" "<workspace-dir>" "<project-slug>"
The workspace directory is the user's current working directory. The script creates:
cogni-portfolio/<project-slug>/
products/
features/
markets/
propositions/
solutions/
competitors/
customers/
context/
uploads/
output/
After the script creates directories, write portfolio.json in the project root with the confirmed company context, including the language field. Follow the schema in $CLAUDE_PLUGIN_ROOT/skills/portfolio-setup/references/data-model.md.
Match the company to a portfolio taxonomy template using all available context — industry field, company description, and broad service areas from web research (if Step 1 included web research). This is more reliable than matching on an industry keyword alone.
{PROJECT_PATH}/taxonomy/template.md exists, the project already owns its taxonomy — skip the bundled match entirely. Read the project-local template to display its type/dimensions/categories to the user for confirmation.$CLAUDE_PLUGIN_ROOT/templates/*/template.md frontmatter for industry_match patternscompany.industryb2b-ict), present it:
portfolio.json (schema unchanged)portfolio-taxonomy in passing — Step 5.4 below is where the ownership decision actually happens. That step presents the user with an explicit branch so customization isn't a thing they have to know to ask for.The project now has a taxonomy referenced in portfolio.json (if Step 5 matched a bundled template). Before proceeding, decide how the project should own that taxonomy. This matters because:
{PROJECT_PATH}/taxonomy/ and is immune to plugin updates. That is the right default the moment the user wants to rename a category, add an industry-specific dimension, or tweak the web-search patterns used during scan.Skipping this decision here and letting users "find out later that they needed to customize" is exactly how scan results end up mis-classified against a taxonomy that doesn't fit the business.
{PROJECT_PATH}/taxonomy/template.md was detected in Step 5.1. Display the existing taxonomy's type, dimension count, and category count for confirmation, note that it is project-local (survives plugin updates), and continue to Step 5.5. No ownership prompt — the project already owns its taxonomy.
Present this choice via AskUserQuestion with four options:
| Option | Label | What happens |
|---|---|---|
keep-bundled (default) | Use the bundled {template name} template as-is | No action. Future plugin updates to this taxonomy will flow through automatically. Proceed to Step 5.5. |
clone | Clone into the project so edits survive plugin updates | Dispatch cogni-portfolio:portfolio-taxonomy in clone mode with {template-type} pre-selected. The skill copies all 7 canonical taxonomy files into {PROJECT_PATH}/taxonomy/ and updates portfolio.json with taxonomy.source_path: "taxonomy/" and taxonomy.cloned_from: "{template-type}". On return, proceed to Step 5.5. |
author | Author a custom taxonomy from scratch | Dispatch cogni-portfolio:portfolio-taxonomy in author mode. Interactive construction of all 7 canonical files from a blank slate. Returns to Step 5.5 on completion. Use when the bundled match is only approximate. |
import | Import an external taxonomy (JSON, spreadsheet, consultancy model) | Dispatch cogni-portfolio:portfolio-taxonomy in import mode. Returns to Step 5.5 on completion. |
Present this choice via AskUserQuestion with four options:
| Option | Label | What happens |
|---|---|---|
pick-bundled | Pick from the 8 bundled templates anyway | Return to Step 5 and present all 8 templates via AskUserQuestion; when the user picks one, come back here with Branch B. |
author (recommended) | Author a custom taxonomy | Dispatch cogni-portfolio:portfolio-taxonomy in author mode. Returns to Step 5.5 on completion. |
import | Import an external taxonomy | Dispatch cogni-portfolio:portfolio-taxonomy in import mode. Returns to Step 5.5 on completion. |
skip | Skip taxonomy — portfolio works without one | No taxonomy set. Downstream scan will be unavailable; products/features can still be authored manually. Proceed to Step 5.5. |
After any dispatch to portfolio-taxonomy returns, continue at Step 5.5. If the dispatch produced a project-local taxonomy (clone, author, or import), portfolio-scan Phase 0 Step 5a will pick it up automatically via the existing resolver precedence — no additional wiring needed.
Before moving to scanning or next steps, ask the user whether they have additional documents that could enrich the portfolio. This is the natural moment — the project structure exists, uploads/ is ready, and ingesting documents before scanning gives downstream skills more context to work with.
"Do you have any internal documents I should work with? Strategy decks, pitch decks, product specs, pricing models, competitive analyses, or similar material can give me a much richer starting point. Drop them in
uploads/and I'll extract products, features, and strategic context from them."
If the user provides documents, recommend running the ingest skill before proceeding to scan — ingested context makes every downstream skill sharper.
If the user has no documents or wants to skip, proceed to Step 5.6.
If a company URL/domain was captured in Step 1 AND a taxonomy template was selected in Step 5, offer to scan.
"You have a taxonomy template ({template name}, {dimension count} dimensions, {category count} categories) and a company domain ({domain}). I can scan their public websites now to discover and classify their service portfolio. This typically takes a few minutes. Proceed?"
If the user declines or no URL was provided, skip to Step 6 — they can run portfolio-scan separately later.
If no taxonomy template was selected in Step 5, skip — scanning requires a taxonomy to classify against. Mention: "Portfolio scanning requires a taxonomy template. You can apply one later and run portfolio-scan separately."
The scan's Phase 7 behaviour depends on a consolidation mode. The choice determines how many features land in features/ and whether per-SKU detail is kept at the feature layer or pushed to solutions/. This is an executive-level portfolio decision, not a scan implementation detail — so the user must make the call before scan starts, not hidden inside scan's Phase 0.
Present the choice via AskUserQuestion with these options. Populate {category count} from the taxonomy chosen in Step 5 (57 for b2b-ict, matching numbers for the other templates).
| Option | Label | Description |
|---|---|---|
consolidate | One feature per SKU (default) | Richest detail — every discovered SKU becomes its own feature with its own proposition / pricing / competitor view. Expect 100–300+ features for a large corporate. Pick this for proposition / sales-enablement workflows. |
category-aggregation | One feature per taxonomy category | Feature grid mirrors the taxonomy you just picked (≤{category count} features). Per-SKU detail (providers, delivery stacks, regions) is preserved for solutions/, not at the feature layer. Pick this for consolidation / benchmarking / executive-view workflows. |
shadow | Stage for review | Offerings land in research/scan-candidates/ for later review — features/ is untouched. Pick this when scanning a partner / reference provider you don't own. |
research-only | Report only | Phase 6 report only — no feature writes. Pick this when scanning a competitor or prospect whose offerings must not enter your feature set. |
Record the selection as CONSOLIDATION_MODE in the session environment before dispatching scan, and also note it back to the user so they can confirm before the scan kicks off a multi-minute run:
"Scanning {company} in
{mode}mode — {one-line consequence for this mode}. Starting now."
Invoke the portfolio-scan skill with CONSOLIDATION_MODE set in the environment. Scan's Phase 0 Step 6 detects the pre-set value and skips its own mode prompt — the user has already made the call here. The portfolio project, portfolio.json, and taxonomy are already in place, so scan's Phase 0 will otherwise resolve immediately.
Present the created project structure and suggest next steps.
If portfolio scan ran in Step 5.6: Products and features have been discovered and imported.
products skill (positioning, pricing tier)features skill (IS-layer descriptions)markets skillpropositions skillsolutions skillcompete and customersverify skillcommunicate skillIf scan did not run: Two paths to populate the portfolio:
uploads/ and run ingestscan to discover and classify offeringsThen continue with downstream skills above.
The portfolio data model has six entity types:
| Entity | Storage | Key Concept |
|---|---|---|
| Product | products/{slug}.json | Named offering that bundles features |
| Feature (IS) | features/{slug}.json | Market-independent capability (belongs to a product) |
| Market | markets/{slug}.json | Target segment with TAM/SAM/SOM |
| Proposition | propositions/{feat}--{mkt}.json | Feature x Market = DOES + MEANS |
| Solution | solutions/{feat}--{mkt}.json | Implementation plan + pricing tiers per proposition |
| Competitor | competitors/{feat}--{mkt}.json | Per-proposition competitive landscape |
| Customer | customers/{mkt}.json | Per-market ideal buyer profile |
| Claims | cogni-claims/claims.json | Web-sourced claim verification registry |
For complete entity schemas and naming conventions, consult $CLAUDE_PLUGIN_ROOT/skills/portfolio-setup/references/data-model.md.
cogni-portfolio/<slug>/ in the workspace"status": "exists" without overwritingupdated field in portfolio.json should be refreshed whenever entities changeportfolio.json in the project root (or use the language determined during setup). If a language field is present, communicate with the user in that language (status messages, instructions, recommendations, questions). Technical terms, skill names, and CLI commands remain in English. If no language field is present, default to English.npx claudepluginhub cogni-work/insight-wave --plugin cogni-portfolioBootstraps a cogni-portfolio project from a Lean Canvas or Business Model Canvas by extracting entities like markets, products, and features with appropriate maturity and priority settings.
Onboards a new GTM project via an agency-style interview, then generates CLAUDE.md, PROGRESS.md, about/me.md, strategy/brand.md, and scaffolds, and content/assets folders.