fin-skills-as-toolslisted
Install: claude install-skill howard-lynn-ye/fin-skills
# fin-skills as tools an agent can call
An agent that can *read* these skills still cannot *run* the guards. Reading a skill about
look-ahead bias changes what the model says; running `check_cost_curve` changes what the
pipeline is allowed to report. This skill is the second thing: the transport-independent tool
layer (`fin_skills.tools`), the MCP server over it (`fin_skills.mcp`), and the exported schemas
for the Anthropic and OpenAI APIs.
The design rule of the whole layer: **nothing is written down twice.** Every schema is derived
at import time from the guard itself — its `required` / `optional` tuples, the annotations on
`check()`, the Bundle slot each keyword resolves to, and the `Inputs` block of its docstring. A
hand-maintained schema goes stale the first time an argument is added; this one cannot.
## 1. What exists, in numbers
✅ measured 2026-09-09 with `python -m fin_skills.tools --list` and
`python -c "from fin_skills.tools import list_tools, exported, excluded; ..."`.
| | Count | |
|---|---|---|
| Tools total | **31** | `python -m fin_skills.tools --list` |
| — catalogue tools (need no data) | 7 | `list_skills`, `read_skill`, `search_skills`, `list_guards`, `describe_guard`, `bundle_coverage`, `check_backtest` |
| — one per guard | 24 | `check_<guard>` |
| Guards in the registry | 28 | `fin_skills.api.registry()` |
| — exported as tools | 24 | can be driven entirely from JSON |
| — **excluded, with a reason** | **4** | §4 |
| Skills readable through `read_ski