11 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project overview
A collection of agent skills for financial analysis and trading, following the Agent Skills open standard. Skills are installable into Claude Code, Claude.ai, and other supported agents (Codex, Gemini CLI, GitHub Copilot, etc.).
Repository structure
This repo is three things at once:
- A Claude Code plugin marketplace (
.claude-plugin/marketplace.json+plugins/) - An Agent Skills repository (the
SKILL.mdfiles insideplugins/<group>/skills/) - An opencli plugin monorepo (
opencli-plugin.jsonat root +opencli-plugins/) — Node code for adapters that some skills depend on
Skills are organized into plugin groups by usage; opencli plugins are separate Node packages.
.claude-plugin/
marketplace.json # Marketplace definition — lists all 6 plugins
plugins/
market-analysis/ # Stock analysis, earnings, correlations, options via yfinance
plugin.json # Plugin manifest for this group
skills/
<skill-name>/
SKILL.md
README.md
references/
social-readers/ # Social media research feeds (Twitter, Discord, LinkedIn, Telegram, YC)
plugin.json
skills/...
data-providers/ # External API data (Adanos, Fintel, Hormuz Strait, TradingView, Hyperliquid)
plugin.json
.mcp.json # Bundled MCP servers (tradingview — headless TradingView scanner, pinned to a git SHA)
skills/...
startup-tools/ # Startup analysis
plugin.json
skills/...
ui-tools/ # Generative UI design system
plugin.json
skills/...
skill-creator/ # Skill authoring, evaluation, and improvement
plugin.json
skills/...
opencli-plugin.json # Top-level opencli MONOREPO manifest — declares sub-plugins
opencli-plugins/ # Source for opencli adapters (Node code, has tests)
tradingview/ # TradingView desktop reader (drives the tradingview-reader skill)
opencli-plugin.json # Per-plugin manifest
package.json # Node package (type: module)
*.js # one file per command (registers via cli({...}))
lib/ # shared helpers
tests/ # node:test units
workspaces/ # Development workspaces (not distributed)
.agents/ # Auto-generated mirror for agent distribution (do not edit directly)
.github/workflows/
release-skills.yml # Zips each skill and publishes as GitHub release on tag
skill-lint.yml # Lints all SKILL.md files
How skills work
Each skill is a self-contained directory under plugins/<group>/skills/. The SKILL.md file is what Claude reads at runtime — it tells the model when to activate, what steps to follow, and where to find reference details.
SKILL.md format
---
name: skill-name
description: >
Multi-line description that doubles as the trigger definition.
Include specific phrases, keywords, and scenarios that should activate this skill.
---
# Skill Title
Step-by-step instructions organized as ## Step N sections.
Tables, code blocks, and formulas as needed.
## Reference Files
- `references/foo.md` — description
Required frontmatter fields: name, description
The description field is critical — it controls when the skill activates. Write it as a comprehensive trigger list, not a summary.
Reference files
Markdown documents in references/ containing detailed API references, code templates, formulas, or schema docs. The SKILL.md instructions tell the model to read specific reference files when needed, keeping the main instructions concise.
Creating a new skill
- Choose the appropriate plugin group (
market-analysis,social-readers,data-providers, orstartup-tools) - Create
plugins/<group>/skills/<skill-name>/directory - Write
SKILL.mdwith YAML frontmatter (name,description) and step-by-step instructions - Add reference files under
references/for detailed API docs, code templates, or formulas that would bloat the main instructions - Add a
README.mdfor the skill's GitHub page (description, triggers, platform, setup, reference file list) - Update the root
README.mdto list the new skill in the appropriate plugin group table - The skill will be auto-zipped and released on tag push via GitHub Actions
Platform considerations
Skills that require shell access, network calls, or external binaries (e.g., twitter-cli, pip install) only work on CLI-based agents like Claude Code. They do not work on Claude.ai, which runs in a sandboxed environment that restricts network access and binaries.
Skills that only use Claude's built-in tools (e.g., show_widget for generative-ui) work on Claude.ai.
Dynamic content with !command``
Skills can embed shell commands that Claude Code executes at skill invocation time, injecting the output inline. Use this for runtime environment checks (tool installation status, auth state, live data). Syntax: wrap in a fenced code block with !`command`.
Example — checking if a CLI tool is installed and authenticated:
!`(command -v mytool && mytool status 2>&1 | head -5 && echo "AUTH_OK" || echo "AUTH_NEEDED") 2>/dev/null || echo "NOT_INSTALLED"`
Guidelines:
- Use for environment/auth checks so the model skips install/auth steps when unnecessary
- Use for injecting live data (e.g., current stock prices) to replace hardcoded values
- Keep commands fast (< 2s) — they run synchronously before the skill loads
- Always include fallback output (e.g.,
|| echo "UNAVAILABLE") so the skill degrades gracefully - Only works on CLI-based agents (Claude Code) — Claude.ai ignores these
Instruction style guidelines
- Organize as numbered steps (## Step 1, Step 2, etc.)
- Use tables to map user intents to actions/methods
- Include defaults for missing parameters so the skill works with partial input
- Put lengthy code templates and API references in
references/files, not inline - End with a "Respond to the User" step describing how to present results
Plugin system
This repo ships as a Claude Code plugin marketplace containing 6 plugins:
| Plugin | Description |
|---|---|
finance-market-analysis |
Stock analysis, earnings, correlations, options via yfinance |
finance-social-readers |
Social media research feeds (Twitter, Discord, LinkedIn, Telegram, YC) |
finance-data-providers |
External API data (Adanos, Fintel, Hormuz Strait, TradingView MCP + desktop reader, Hyperliquid) |
finance-startup-tools |
Startup analysis frameworks |
finance-ui-tools |
Generative UI design system for Claude widgets |
finance-skill-creator |
Skill authoring, evaluation, and improvement |
.claude-plugin/marketplace.json— marketplace listing with all 6 plugin entries.plugins/<group>/plugin.json— per-plugin manifest (name, version, keywords). Skills underplugins/<group>/skills/with SKILL.md frontmatter are auto-discovered by the plugin loader.plugins/<group>/.mcp.json— optional bundled MCP servers, started automatically when the plugin is enabled. Tools are namespacedmcp__plugin_<plugin-name>_<server-name>__<tool>. Currently:data-providers/.mcp.jsonruns tradingview-mcp viauvx, pinned to an upstream commit SHA (bump the SHA deliberately and re-verifytools/list— upstream reuses version numbers, so PyPI lags git)..agents/— auto-generated mirror for agent distribution. Do not edit directly — this is produced fromplugins/content.
Users run npx plugins add himself65/finance-skills and select one or more plugin groups interactively; --yes installs every discovered group. The current plugins CLI has no --plugin flag. Individual skills can be installed via npx skills add himself65/finance-skills --skill <name>.
When a skill is invoked as a plugin, it is namespaced as <plugin-name>:<skill-name> (e.g., /finance-market-analysis:options-payoff).
CI/CD
- Release workflow (
.github/workflows/release-skills.yml): On tag push (v*), zips each skill fromplugins/*/skills/*/and publishes them as a GitHub release. These zips can be uploaded to Claude.ai for web/desktop users. - Lint workflow (
.github/workflows/skill-lint.yml): Lints allSKILL.mdfiles across all plugin groups. The linter capsdescriptionat 1024 chars and rejects angle brackets (</>). - opencli plugin tests (
.github/workflows/opencli-plugin-test.yml): Walksopencli-plugins/*/and runsnpm testfor each plugin that has apackage.jsonandtests/*.test.js. Pure-JS unit tests only — wire-level integration (CDP attach, scanner endpoints) is out of scope and must be PoC-verified against a real desktop app.
opencli plugins
Some skills (currently tradingview-reader) require a custom opencli adapter that is not part of opencli's built-in registry. Those adapters live under opencli-plugins/ as a Node monorepo, declared by the top-level opencli-plugin.json.
Layout
opencli-plugin.json(repo root) — opencli's monorepo manifest. Maps each sub-plugin name to its directory.opencli-plugins/<name>/— one directory per adapter. Each contains:opencli-plugin.json— per-plugin manifest (name, version, opencli compatibility range)package.json— Node package,"type": "module", peer dep on@jackwener/opencli<command>.jsfiles at the top level — each registers itself viacli({ site, name, ... })from@jackwener/opencli/registrylib/— shared helpers (decoders, parsers)tests/—node:testunits; run withnpm testfrom inside the plugin directory
Install path for users
opencli plugin install github:himself65/finance-skills/<sub-plugin-name>
The third path segment selects the sub-plugin. A bare github:himself65/finance-skills install would pick up every enabled sub-plugin from the monorepo.
Authoring a new opencli plugin
- Create
opencli-plugins/<name>/withopencli-plugin.json,package.json, and at least one command file. - Each command file imports
cli, Strategyfrom@jackwener/opencli/registryand callscli({...})at module top level. - For desktop-app adapters (CDP attach), use
Strategy.UI+browser: true+domain: '<host>'. For pure HTTP, useStrategy.PUBLIC+browser: false. - Add the new sub-plugin to the top-level
opencli-plugin.jsonpluginsmap. - Tests for pure helpers belong in
tests/and should pass withnpm test. - The skill that drives the plugin lives under
plugins/<group>/skills/<name>/and must reference the install command exactly as shown above.
Important constraints
- No trade execution. All brokerage-related skills must be read-only. Never allow AI to execute trades.
- This is primarily a documentation/reference repository — most of the codebase is
SKILL.mdfiles with no build step. The exception isopencli-plugins/, which is real Node code with tests; quality there comes from passing tests and PoC verification, not just clear instructions.