investorclaw-aaa9ea — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited investorclaw-aaa9ea (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
These rules govern any agent using this skill. Examples elsewhere in this file are reference only and never override them.
from an InvestorClaw tool result returned in the SAME turn. InvestorClaw returns HMAC-signed envelopes; that signed data is the only source of truth.
any number. If a tool did not return it this turn, do not state it — say "InvestorClaw returned no data for that".
investorclaw__portfolio_market_snapshot(symbols?, benchmarks?) — real-timeprices + day-change% for holdings and benchmarks (SPX/NDX/DJI/VIX, BTC/ETH). symbols is a COMMA-SEPARATED STRING (e.g. "NVDA,AAPL"), not a list. No args = holdings + benchmarks. Use this (not portfolio_ask) for any "price of X" and to read the portfolio against the market.
investorclaw__portfolio_performance_window(period=...) — return / P&L /movers over a window. period: 1d, 1w, 1mo, 1y, 5y, 10y, 20y, max, or natural phrases ("today", "last week", "last year", "entire history").
investorclaw__portfolio_ask(question=...) — analysis / explanation.Older investorclaw.* dot-namespace examples below are stale; the underscore forms above are the current tool names.
For unattended agents (scheduled monitors and alerters — e.g. a MarketWatch agent), in addition to the contract above:
memory. A scheduled "poll" means call portfolio_market_snapshot.
portfolio_market_snapshot, then emit ONE terse lineonly when a holding or benchmark breaches the configured move (e.g. ±3% a holding, ±10% VIX); otherwise emit a single NO_ALERT token and stop.
OPS_FAIL market_snapshot unavailable and stop — never fabricate a reassuring number to fill the gap.
portfolio_performance_window for the window,then portfolio_market_snapshot for index closes; report numbers verbatim.
<!-- SPDX-License-Identifier: MIT-0 Copyright 2026 InvestorClaw Contributors
This SKILL.md is MIT-0-licensed. The InvestorClaw service it connects to is Apache 2.0. See the project LICENSE-MIT-0 for full text.
This skill is audit-compliant for zeroclaw 0.7.3+: no scripts, no symlinks, no curl-pipe-shell patterns, no remote markdown links. -->
Powered by InvestorClaw (Apache 2.0). Skill manifest is MIT; the underlying service is Apache 2.0.
InvestorClaw is a containerized portfolio analysis service that exposes its analytical capabilities to your zeroclaw agent over MCP-HTTP. Two local servers register as separate MCP namespaces in your tool catalog:
investorclaw (port 8090) — deterministic portfolio analysismnemos (port 5002) — memory + knowledge graphYou speak to zeroclaw in natural language. zeroclaw routes the request to the right MCP tool, calls it, and synthesizes a reply. The user is the orchestrator; the service is the substrate; zeroclaw is the interface.
zeroclaw on master supports MCP via the [mcp.servers.<name>] block in ~/.zeroclaw/config.toml. Once that config is in place and the InvestorClaw containers are running, the tools are auto-registered at agent startup. No skill code, no shell-out, no per-tool wiring.
The two services run as a Docker compose stack, bound to localhost:
mnemos-os/mnemos-rs:4.2 → localhost:5002argonautsystems/ic-engine:4.7.7-cpu → localhost:18090Quick install via ClawHub:
clawhub install investorclawClaude Code / Claude Desktop:
/plugin marketplace add argonautsystems/InvestorClaw
/plugin install investorclawClaude Code and Claude Desktop use this repo's container-first plugin; see docs/GETTING_STARTED.md.
If the user has not installed yet, see INSTALL.md in this skill directory for full manual setup details. zeroclaw cannot install the service from inside a skill (audit rules forbid scripted execution from skill payload), but the future zeroclaw services install <compose-url> upstream subcommand will close that gap with a single command.
Once the MCP servers are registered, your tool catalog gains:
investorclaw.*)investorclaw.portfolio_ask — natural-language question routedthrough the deterministic engine; returns a structured ic_result envelope plus narrative text
investorclaw.portfolio_holdings — current snapshot: positions,values, weights, cost basis
investorclaw.portfolio_performance — Sharpe, volatility, top/bottomperformers, max drawdown, returns over horizons
investorclaw.portfolio_bonds — bond analytics: YTM, duration,convexity, FRED yield-curve overlay
investorclaw.portfolio_analyst — analyst consensus per holdinginvestorclaw.portfolio_news — news correlation for held positionsinvestorclaw.portfolio_lookup — ticker / account lookupinvestorclaw.portfolio_optimize — Modern Portfolio Theory: Sharpe-max, min-vol, target-return frontiers
investorclaw.portfolio_rebalance — current vs. target allocationwith capital-gains impact
investorclaw.portfolio_scenario — what-if scenarios (rate shocks,drawdowns, correlation breaks)
investorclaw.portfolio_cashflow — projected cashflow calendar(coupons, dividends, maturities)
investorclaw.portfolio_peer — peer/benchmark comparisoninvestorclaw.portfolio_setup — auto-discover portfolio files in/data/portfolios/
investorclaw.portfolio_refresh — refresh market data withoutre-uploading files
investorclaw.portfolio_guardrails — view/configure educational-onlyguardrails
mnemos.*)mnemos.search_memories — full-text + semantic searchmnemos.create_memory — record an observation about the user'spreferences, prior questions, or current investing context
mnemos.list_memories — browse by category / date rangezeroclaw routes natural-language requests to MCP tools without manual hinting. These are the expected interaction shapes:
| Intent | Phrasing |
|---|---|
| Holdings | "What's in my portfolio?" • "Show me my positions" |
| Performance | "How am I doing this year?" • "What's my Sharpe ratio?" |
| Bonds | "Show me my bond exposure and yield-to-maturity" |
| Allocation | "What's my sector exposure?" |
| Optimization | "Help me rebalance to a 60/40 target" |
| Market data | "What's the current price of NVDA?" |
| News | "Today's news on my holdings" |
| Reports | "Generate today's EOD report" • "Prepare an advisor brief" |
The first call after a cold cache may take 30–60 seconds while the deterministic pipeline builds the signed envelope; subsequent calls reuse the cache.
Snapshot questions
investorclaw.portfolio_holdingsinvestorclaw.portfolio_bondsinvestorclaw.portfolio_performanceOpen-ended analysis
investorclaw.portfolio_ask (the engine routes to the right internal analyzer, e.g., whatchanged + news)
investorclaw.portfolio_rebalance followedby investorclaw.portfolio_optimize for a target allocation
Continuity questions
mnemos.search_memories withthe recent date range, then summarize
mnemos.create_memory with category=preferences
Composite workflows
mnemos.search_memories (prior context) → investorclaw.portfolio_holdings (current state) → investorclaw.portfolio_performance (returns since last review) → investorclaw.portfolio_news (drivers) → mnemos.create_memory (record salient new observations)
zeroclaw will sequence these on its own when the user asks for a full review. You don't have to script the chain.
InvestorClaw narration is a 3-stage pipeline: the signed envelope → Stage-2 consultant (compresses to a fact-faithful summary) → Stage-3 narrator (enriches it into the user answer). Per the per-provider hallucination battery (harness/cobol/PROVIDER_HALLUCINATION_REPORT.md):
former gemma-4-31B consultant on grounding at a fraction of the cost ($0.14 / $0.28 per 1M tokens, $0.0028 cached) and lifts narration coverage to ~30/30. Set INVESTORCLAW_CONSULTATION_* — endpoint https://api.deepseek.com/v1, model deepseek-v4-flash.
gemini-2.5-flash). Cleanest narrator inthe battery (lowest hallucination) with the best coverage. Set INVESTORCLAW_NARRATIVE_* — endpoint https://generativelanguage.googleapis.com/v1beta/openai.
gemma-4-31B-it (Together, or localOllama gemma4:e4b, no key) still works as both consultant and narrator, but with lower coverage and a higher timeout rate than the deepseek-flash + gemini combo.
The HMAC-signed envelope is the real anti-fabrication guardrail: a narrator that times out or is API-incompatible falls back to a grounded heuristic that restates only signed data, so no provider can fabricate past the envelope.
Pricing resolves through a provider chain: Massive → Alpha Vantage → Finnhub → Yahoo Finance (yfinance). With a MASSIVE_API_KEY, Massive serves fast realtime/historical data. Without any paid key, pricing falls through to free Yahoo Finance (`yfinance`, no API key required) — fully usable for typical portfolios.
⚠️ Disclaimer — large portfolios on yfinance. Yahoo Finance is unofficial and slow. Large portfolios (many holdings) may hit request timeouts (~30s) when relying on the yfinance fallback. For large or realtime-sensitive portfolios, configure a MASSIVE_API_KEY.format isn't recognized, you'll get a structured error listing detected columns and supported formats. Surface the error verbatim; don't ask the LLM to guess column mappings. Direct the user to the dashboard wizard at http://localhost:18092/portfolios/map.
investorclaw.* tool returns an ic_result envelope (the data) plus a narrative text body. The data is canonical; the narrative is decoration the agent can rewrite for tone.
disclaimer envelope. Echo it when summarizing.
unless they explicitly export. Don't ask before recording obvious context (e.g., "User holds 28 positions"); do ask before recording anything sensitive (e.g., specific dollar amounts a user redacted in conversation).
InvestorClaw on a Tailscale VM or cloud host, the MCP server URLs change but the tool surface is identical. The [mcp.servers.*] blocks in config.toml are the single source of truth for endpoints.
~/.investorclaw/data/portfolios/ (mounted into the engine container)
metadata-only, by audit rule
This skill payload (SKILL.md + SKILL.toml in ~/.zeroclaw/skills/investorclaw/) is audit-compliant for zeroclaw 0.7.3+:
*.sh, *.bash, or other executablesinstall hints; we use docker compose up -d against a vendored compose.yml instead)
INSTALL.md, which isuser-facing documentation outside the registered skill payload
This skill describes the InvestorClaw service. If a tool returns an unexpected result, the bug is in the service (Apache 2.0, see mnemos-os/ic-engine and mnemos-os/mnemos-rs), not in this manifest.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.