Skip to content
Back to skills

Claude Code

ASecurity

Deterministic-first portfolio analyzer for Claude Code via MCP-HTTP at localhost:18090. Holdings, performance, Sharpe + Sortino, FRED yields, bond duration, scenario rebalancing.

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 12, 2026
ai-agentspythonrustgobashrailsdockergitapiperformance

Works with

  • claude code
  • claude desktop
  • terminal
  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned June 12, 2026

npx -y skills add argonautsystems/InvestorClaw --skill claude-code --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Claude Code?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Claude Code
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/argonautsystems-claude-code/badge)](https://www.skillsdirectory.com/skills/argonautsystems-claude-code)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: investorclaw
description: Deterministic-first portfolio analyzer for Claude Code via MCP-HTTP at localhost:18090. Holdings, performance, Sharpe + Sortino, FRED yields, bond duration, scenario rebalancing.
homepage: https://github.com/argonautsystems/InvestorClaw
user-invocable: true
metadata: {"license":"MIT-0","version":"4.7.2","runtime":"claude-code","image":"ghcr.io/argonautsystems/ic-engine:4.7.2-cpu","mcp-endpoint":"http://localhost:18090/mcp"}
---

<!--
SPDX-License-Identifier: MIT-0
Copyright 2026 InvestorClaw Contributors

This SKILL.md is MIT-0-licensed. It describes the Claude Code marketplace
plugin that connects to InvestorClaw v4.0 (Apache 2.0). The plugin
ships only this file, INSTALL.md, and a manifest — no Python, no bundle.
-->

# InvestorClaw — Claude Code Plugin (v4.0)

> Powered by [InvestorClaw](https://investorclaw.app) (Apache 2.0).
> This plugin is MIT-0-licensed.

## What this is

InvestorClaw is a containerized portfolio analysis service. The user
runs it locally as two Docker containers via `docker compose up -d`;
this Claude Code plugin is the thin client that registers the service's
MCP servers with your agent and exposes two convenience slash commands.

The plugin is a manifest + this SKILL.md + a one-time config write
that points Claude Code at two HTTP MCP endpoints on localhost. All
analysis happens inside the user's Docker containers — the agent
never installs or imports anything.

This is the current Claude Code / Claude Desktop path. The plugin
installs directly from this repo and uses the same skill bundle and
same container-first runtime as every other agent. See
`docs/GETTING_STARTED.md` for the canonical setup.

## Slash commands the plugin exposes

The plugin registers two slash commands so portfolio questions don't
depend on the LLM spontaneously deciding to call MCP tools:

- **`/ask <question>`** — routes to the `investorclaw.portfolio_ask`
  tool. Pass the user's natural-language portfolio question (e.g.,
  `/ask what are my top 5 dividend payers?`). The deterministic engine
  picks the right analyzer and returns a structured `ic_result` plus
  narrative text.

- **`/refresh`** — routes to `investorclaw.portfolio_refresh`. Pulls
  fresh market data without re-uploading portfolio files. Use this when
  the user has been chatting for a while and quotes may be stale.

These commands are deterministic entry points: the user types the slash
command, Claude Code dispatches it to the named MCP tool, the engine
returns structured output. **No LLM routing decision is involved at the
slash-command boundary.** This is by design — slash commands are
load-bearing for reliability.

## MCP tools available (after install)

When InvestorClaw is running and the plugin is loaded, your tool
catalog gains:

### Portfolio analysis (`investorclaw.*`)

- `investorclaw.portfolio_ask` — natural-language question router (also
  invoked by `/ask`)
- `investorclaw.portfolio_refresh` — market-data refresh (also invoked
  by `/refresh`)
- `investorclaw.portfolio_holdings` — current snapshot of positions,
  values, weights
- `investorclaw.portfolio_performance` — Sharpe, volatility, top/bottom
  performers, max drawdown
- `investorclaw.portfolio_bonds` — bond analytics (YTM, duration, FRED
  yield curve)
- `investorclaw.portfolio_analyst` — analyst ratings per holding
- `investorclaw.portfolio_news` — news correlation for held positions
- `investorclaw.portfolio_lookup` — ticker / account lookup
- `investorclaw.portfolio_optimize` — Sharpe / min-vol optimization
- `investorclaw.portfolio_rebalance` — current vs target with tax impact
- `investorclaw.portfolio_scenario` — what-if scenarios on holdings
- `investorclaw.portfolio_cashflow` — projected cashflow from bonds
- `investorclaw.portfolio_peer` — peer comparison vs benchmark
- `investorclaw.portfolio_setup` — auto-discover portfolio files in
  `/data/portfolios/` inside the container
- `investorclaw.portfolio_guardrails` — view/configure educational-only
  guardrails

### Memory (`mnemos.*`)

- `mnemos.search_memories` — full-text + semantic search across
  remembered observations
- `mnemos.create_memory` — record an observation about the user's
  preferences, prior questions, or current investing context
- `mnemos.list_memories` — browse by category / date

## What to ask — example queries

| 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?" • "How concentrated am I?" |
| 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" |
| Fresh data | "Prices moved — refresh before answering" → `/refresh` |

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.

## Recommended model split

Claude Code uses the agent's own LLM — no external API key required.

- **Narrative**: Haiku 4.5 — fast, cheap, ~10× lower output cost than
  Sonnet. With a clean signed envelope, narrative synthesis is mostly
  transcription, so the cheap model is sufficient.
- **Validator**: Sonnet 4.6 (default) or Opus 4.7 (escalation) — gates
  the Haiku output for fabrication, mis-quoted numbers, and training-leak
  drift. Validator output is short (~1 K tokens), so the smart-model bill
  stays low.

Cost-shaped: cheap model on the long output, smart model on the short
safety check. Total session cost on a 100-position portfolio typically
lands well under $0.01.

## How to use it

1. **For portfolio questions:** prefer `/ask "<question>"`. It's
   deterministic and surfaces the structured `ic_result` envelope
   directly. Decorate the narrative if the user wants more context, but
   trust the engine's numbers — they are computed in code, not inferred.

2. **For follow-up questions:** call `mnemos.search_memories` first to
   pull relevant prior observations (e.g., user's risk tolerance, prior
   discussions about specific holdings). Then call the appropriate
   `investorclaw.*` tool with that context in mind.

3. **For "what changed" questions:** call `mnemos.search_memories` for
   prior portfolio summaries; compare against the current
   `investorclaw.portfolio_holdings` output.

4. **After delivering an analysis:** call `mnemos.create_memory` to
   record any salient observations the user might want to remember
   (e.g., "User flagged BABA as a never-sell sentimental position
   during the 2026-04-30 review"). Don't over-record — only record what
   wouldn't be obvious from re-reading the data later.

5. **When the user uploads a portfolio file:** stage the attachment to
   the bind-mounted `portfolios/` directory (see top-level SKILL.md for
   the agent file-staging contract), then call `portfolio_setup`
   followed by `portfolio_ask`. Or direct the user to the dashboard at
   http://localhost:18092 if they prefer to drop files there directly.

## Presentation rules

- Preserve quoted source text, numerical values, timestamps, and
  freshness labels exactly.
- Never fabricate market, ticker, bond, news, or optimization data.
- If the engine's signed envelope lacks a requested fact, say
  InvestorClaw did not provide it and quote the engine's limitation
  verbatim.
- If data looks stale, suggest `/refresh` before answering.

## Important behaviors

- **Deterministic at the data layer.** The investorclaw tools compute
  numbers in code. If a portfolio format isn't recognized, you'll get a
  structured error with detected columns and supported formats. Don't
  ask the LLM to disambiguate — surface the error and direct the user
  to the dashboard's column-mapping wizard at
  http://localhost:18092/portfolios/map.

- **Educational only — never investment advice.** All outputs include
  a disclaimer envelope. Echo it when summarizing for the user. Do not
  recommend specific buys or sells.

- **No money movement, no trades.** This plugin cannot execute trades,
  move money, place orders, or access brokerage accounts. If the user
  asks for any of those, decline and direct them to a licensed advisor.

- **Local by default.** MCP endpoint is on `localhost:18090` (REST +
  MCP); dashboard is on `localhost:18092`. If the user has deployed the
  service to a remote host (Tailscale VM, cloud), the URLs change but
  the tool surface is identical — the user edits the manifest's MCP
  server URL.

## When the plugin can't reach the service

If `investorclaw.*` calls fail with connection errors, the user's
Docker containers aren't running. Tell the user:

1. Open a terminal and run `docker compose ps` in `~/.investorclaw/`
2. If containers aren't listed: `cd ~/.investorclaw && docker compose up -d`
3. If Docker itself isn't installed: see INSTALL.md for the prereq link
4. If the MCP servers still don't respond after `docker compose up -d`:
   wait ~10 seconds for health checks, then retry

See INSTALL.md for the full bring-up sequence.

## Install

**Claude Code / Claude Desktop:**

```
/plugin marketplace add argonautsystems/InvestorClaw
/plugin install investorclaw
```

**OpenClaw / ZeroClaw / Hermes users:** install via ClawHub:

```bash
clawhub install investorclaw
```

## What this plugin does NOT do

- Does not install or execute any code on the agent side — it's a
  manifest, this SKILL.md, and an MCP-server config write
- Does not download or execute portfolio data on the agent side
- Does not manage credentials (the engine reads broker CSVs the user
  drops in the dashboard)
- Does not execute trades or move money
- Does not give investment advice

## License + attribution

- This plugin (manifest, SKILL.md, INSTALL.md) is **MIT-0-licensed**.
- The InvestorClaw service it connects to is **Apache 2.0**, hosted at
  `github.com/argonautsystems/InvestorClaw` and the runtime container at
  `mnemos-os/ic-engine`.
- The MNEMOS memory service is **Apache 2.0**, hosted at
  `mnemos-os/mnemos-rs`.

> Powered by [InvestorClaw](https://investorclaw.app) (Apache 2.0).
> This plugin is MIT-0-licensed.

Files in this skill

  • INSTALL.md3.8 KB
  • SKILL.md10.1 KB
  • manifest-template.json3.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.