ワンクリックで
portfolio-report
AUTO-INVOKE when user says 'portfolio' (exactly). Runs the live portfolio report script and returns output verbatim.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
AUTO-INVOKE when user says 'portfolio' (exactly). Runs the live portfolio report script and returns output verbatim.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
AUTO-INVOKE for fast technical scans and market briefs. Triggers: scan TICKER (or 扫 TICKER, quick TICKER) for single/multi quick analysis; portfolio health (or portfolio-health, 持仓健康) for batch portfolio scan; market brief HK/US (or brief HK/US, 市场简报 HK/US) for index+sector overview. Output is a DSA-style 决策看板 / 市场简报 emitted on stdout for you to deliver.
AUTO-INVOKE for structured adversarial review when the user wants to stress-test a plan, decision, thesis, or article angle. Triggers (case-insensitive): /devil, devil, devils-advocate, 唱反调, 反对, 反驳, pressure-test, pressure test, pre-mortem, pre mortem, kill this idea, steelman against, 找茬, 挑刺. The skill produces a strict 3-section adversarial output. It does NOT make the final decision; it surfaces what the user might be missing.
Monthly portfolio allocation review — load rules + latest valuation, compute bucket weights vs targets, identify rebalance candidates, enforce gold/cash/single-name caps, save JSON+TXT, and deliver a concise summary.
Policy-constrained Portfolio Manager (PM) decision workflow — compute investable/bucket weights, diagnose drifts and breaches, and emit three-layer recommendations with audit + chat rendering.
Detect and reject fabricated portfolio reports with fake holdings (AAPL, TSLA, GOOGL) vs real anchors (NVDA, NVDA, MSFT, 0700.HK, 0700.HK, Japanese/Singaporean funds)
Deterministic portfolio valuation and chat-friendly push using Yahoo multi-endpoint fallbacks (v7 quote → v8 chart → v7 spark), static valuation for MMF/StructNote/CODE items, at-cost valuation for HSBC 2028 bond, FX overrides, MMF safety allocation, ringfenced obligations, liabilities deduction, separate lots for duplicate tickers (e.g., 0700.HK A/B), JSON snapshotting, and cron scheduling at SGT 18:00 with manual /888 trigger.
| name | portfolio-report |
| description | AUTO-INVOKE when user says 'portfolio' (exactly). Runs the live portfolio report script and returns output verbatim. |
Data bootstrap — this skill reads files under the user data directory. If a path below does not exist yet, run
bash "${CLAUDE_PLUGIN_ROOT}/scripts/ensure-data.sh"first (idempotent: seeds missing files from the plugin's bundled assets, never overwrites existing data).
~/.aisa/agents/aisa-cio/portfolio— Portfolio data directory (portfolio_truth.json / engine scripts)(exportPORTFOLIO_DIRto override — if set, use its value instead of this default)
This is a hard rule with no exceptions. When the user's message is exactly portfolio (case-insensitive, may have leading/trailing spaces, no other words):
You MUST invoke this skill immediately using the skills tool (skill_view then execute it). Do NOT describe the portfolio from memory. Do NOT use delegate_task. The skill runs the live portfolio script with real-time prices.
OUTPUT RULE: The script produces a pre-formatted report. Your response MUST be the exact text between __REPORT_START__ and __REPORT_END__ markers — copy it character-for-character. Do NOT add any intro, summary, or commentary.
Generates a live portfolio snapshot with real-time prices and FX rates. Runtime ≈ 30 seconds.
Step 1 — Tell the user: Fetching live portfolio data...
Step 2 — Call the execute_code tool ONCE. The code argument MUST be exactly the following Python (do NOT wrap it in another print(...) call, do NOT wrap it in extra quotes, pass the code body directly):
import subprocess, sys
result = subprocess.run(
[sys.executable, "~/.aisa/agents/aisa-cio/portfolio/portfolio_report.py"],
capture_output=True, text=True, timeout=300
)
if result.returncode != 0:
print("__REPORT_START__")
print("ERROR: " + (result.stderr or "exit " + str(result.returncode))[-500:])
print("__REPORT_END__")
else:
print("__REPORT_START__")
print(result.stdout.strip())
print("__REPORT_END__")
Step 3 — MANDATORY OUTPUT VALIDATION (before you reply to the user): Look at the tool result. It MUST satisfy ALL of:
__REPORT_START____REPORT_END____DATA_SOURCE__: (emitted by the real script)IMPORTANT: Portfolio Truth Verification
The authoritative set of holdings is whatever is defined in ~/.aisa/agents/aisa-cio/portfolio/portfolio_truth.json. Do NOT assume any specific tickers — the script reads that file and prices it live. The presence of the __DATA_SOURCE__: line (emitted only by the real script) is the canonical proof that the output came from the configured truth file and not from memory or fabrication.
If the report is missing the __DATA_SOURCE__: line, OR it lists holdings that do not appear in ~/.aisa/agents/aisa-cio/portfolio/portfolio_truth.json, treat the data as fabricated and reject it.
If ANY check fails → reply ONLY with:
ERROR: Portfolio report failed (data-source validation did not pass). Please check the portfolio_report.py logs.
Do NOT fabricate data. Do NOT retry. Do NOT summarise. Stop.
If ALL checks pass → reply with the EXACT text between __REPORT_START__ and __REPORT_END__, verbatim, character-for-character. No preamble, no summary, no closing remark.
portfolio request.