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.
npx claudepluginhub n0rvyn/indie-toolkit --plugin product-lensThis skill uses the workspace's default tool permissions.
`portfolio-scan` is the root AI-facing periodic skill for `product-lens`.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides implementation of event-driven hooks in Claude Code plugins using prompt-based validation and bash commands for PreToolUse, Stop, and session events.
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
- ...