Initialize a new cogni-portfolio project with company context and directory structure. Use whenever the user mentions creating a portfolio, new portfolio project, setting up portfolio, "start portfolio planning", "new company", "new project", or wants to begin structuring their product/market messaging — even if they don't say "setup" explicitly.
From cogni-portfolionpx claudepluginhub cogni-work/insight-wave --plugin cogni-portfolioThis skill is limited to using the following tools:
references/data-model.mdreferences/regions.jsonProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Builds 3-5 year financial models for startups with cohort revenue projections, cost structures, cash flow, headcount plans, burn rate, runway, and scenario analysis.
Initialize a cogni-portfolio project by capturing company context and creating the project directory structure.
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, redirect to the portfolio-resume skill instead of creating a duplicate.
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/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.
$CLAUDE_PLUGIN_ROOT/templates/*/template.md frontmatter for industry_match patternscompany.industryb2b-ict), present it:
portfolio.json (schema unchanged)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}) 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 confirms, invoke the portfolio-scan skill. The portfolio project, portfolio.json, and taxonomy are already in place, so scan's Phase 0 will resolve immediately.
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."
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.