From product-lens
Use for periodic scans over a project root such as ~/Code. Builds a root-level picture of active projects, current risks, and PKOS exchange artifacts for downstream ingestion.
How this skill is triggered — by the user, by Claude, or both
Slash command
/product-lens:portfolio-scanThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`portfolio-scan` is the root AI-facing periodic skill for `product-lens`.
portfolio-scan is the root AI-facing periodic skill for product-lens.
It answers:
It does not produce fake completion percentages. It records observable facts first, then emits a compact portfolio summary and exchange artifacts for PKOS.
Expected structured input:
{
"intent": "portfolio_scan",
"project_root": "~/Code",
"targets": [],
"window_days": 14,
"mode": "summary",
"save_report": true,
"sync_notion": false
}
Use targets if provided.
Otherwise discover repositories under project_root using lightweight indicators:
.git/.xcodeproj or .xcworkspacePackage.swiftpackage.jsonpubspec.yamlREADME.mdIgnore obvious non-project directories such as:
node_modules.buildDerivedDatadistbuildDispatch repo-activity-scanner for each candidate repository.
The agent should return facts only:
For each repository, summarize:
Allowed portfolio-scan decision values:
focusmaintainfreezestopwatchWhen evidence is weak, prefer:
watchDo not force a hard verdict when the repo lacks enough signal.
Dispatch ingress-publisher with:
intent = portfolio_scanCommand shape:
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/publish_exchange.py \
--intent portfolio_scan \
--project-root ~/Code \
--decision watch \
--confidence medium \
--risk "Evidence is still sparse across most repos." \
--reason "Only a subset of repos show coherent recent product movement." \
--action "Run project_progress_pulse on the top active repos." \
--evidence ~/Code \
--exchange-root ~/Obsidian/PKOS/.exchange/product-lens
Artifact target:
~/Obsidian/PKOS/.exchange/product-lens/portfolio-scan/
Do not select final PKOS vault destinations here.
Return the machine-readable summary first:
{
"decision": "watch",
"confidence": "medium",
"why": ["reason 1", "reason 2"],
"biggest_risk": "one-line risk",
"next_actions": ["action 1", "action 2"],
"source_note_paths": ["exchange artifact paths"]
}
Then return a Markdown digest:
# Portfolio Scan
## Focus Candidates
- ...
## At Risk
- ...
## Follow-up
- ...
npx claudepluginhub n0rvyn/indie-toolkit --plugin product-lensAggregates cross-repo health signals from vault-registered GitLab/GitHub projects into a single _PORTFOLIO.md dashboard. Runs on demand or at session-start when enabled.
Scans repo directory to detect projects, summarize architecture and components per project, map dependencies, and generate repo.md for codebase overviews and analysis prep.