Skip to content

Commit 8ec384d

Browse files
ralyodioclaude
andauthored
feat(plugin)!: one vocabulary across both plugins, and a /help in each (#335)
BREAKING CHANGE: three commands were renamed. /stocks:stocks → /stocks:report, /crypto:crypto → /crypto:report, /crypto:coin → /crypto:lookup. The two plugins had grown separate words for the same question — `stocks` and `crypto` for "the full report", `coin` and `lookup` for "name → symbol" — so knowing one taught you nothing about the other. Worse, the headline command in each was named after its own plugin, which is what produced `/crypto:crypto`. They cannot ship the same *set*: a pair has no earnings transcript and an equity has no order book. They can share vocabulary, and now do: shared help · report · quote · lookup stocks signals · research · reports · discover crypto book · bars · spark · pairs Eight each, four spelled identically. `/stocks:report NVDA` and `/crypto:report BTC` are the same question asked of different markets. New in both: `/…:help`, which lists that plugin's commands with no tool call — the answer to "command not found" being a dead end rather than a signpost. New in stocks: `/stocks:quote`, the four-line read. It exists because the CLI already aliases `quote` to `report` for equities, so the plugin was the only surface where the word did not work — which is exactly how someone found it. It reads the same document as `report`; the difference is how much it prints. Two tests hold the shape: every plugin must ship each shared name, and no command may repeat its own plugin's name. The second one is what a bare `/crypto:crypto` would have failed. Both plugins go to 0.3.0 — renamed commands do not reach an existing install until that number moves. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 61a68ba commit 8ec384d

17 files changed

Lines changed: 207 additions & 32 deletions

File tree

README.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -376,14 +376,20 @@ moshcode plugin install crypto # add the marketplace + install `crypto`
376376
moshcode plugin remove stocks # take it back off
377377
```
378378

379-
`stocks@moshcode` adds `/stocks:stocks`, `/stocks:signals`, `/stocks:research`,
380-
`/stocks:lookup`, `/stocks:reports`, and `/stocks:discover` — the same advis0r research surface described above,
381-
driven from inside a coding session.
379+
The two plugins share the four names for the questions both markets answer, and
380+
differ only where the markets do. Either one's `/…:help` prints its own list.
382381

383-
`crypto@moshcode` adds `/crypto:crypto`, `/crypto:quote`, `/crypto:book`,
384-
`/crypto:bars`, `/crypto:spark`, `/crypto:pairs`, and `/crypto:coin`. It ships separately because it is a different surface,
385-
not a mode of the first: live venue reads instead of stored snapshots, and a
386-
score that must not be ranked against an equity's.
382+
| | `stocks@moshcode` | `crypto@moshcode` |
383+
|---|---|---|
384+
| shared | `help` `report` `quote` `lookup` | `help` `report` `quote` `lookup` |
385+
| its own | `signals` `research` `reports` `discover` | `book` `bars` `spark` `pairs` |
386+
387+
So `/stocks:report NVDA` and `/crypto:report BTC` are the same question asked of
388+
different markets, while `/stocks:signals` (what an executive said on a call)
389+
and `/crypto:book` (live order book depth) have no counterpart on the other
390+
side. They ship separately because they are different surfaces, not modes of one
391+
another: stored snapshots versus live venue reads, and a crypto score that must
392+
not be ranked against an equity's.
387393

388394
Restart the engine after installing either; a newly installed plugin is not live
389395
in a session that is already running.
@@ -420,7 +426,7 @@ any marketplace". `moshcode plugin install` runs both steps for you.
420426
### Upgrading from `ticker@moshcode`
421427

422428
`stocks` was called `ticker` before v0.29.0. Installing the new id does **not**
423-
replace the old one — engines install plugins side by side, so `/stocks:stocks` would
429+
replace the old one — engines install plugins side by side, so `/stocks:report` would
424430
come from two plugins at once. Remove the old id first:
425431

426432
```sh

plugins/crypto/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
33
"name": "crypto",
44
"description": "Crypto market data slash commands backed by advis0r.com: live prices, technical scores, order books, OHLCV history and sparklines across Alpaca's US crypto venue.",
5-
"version": "0.2.0",
5+
"version": "0.3.0",
66
"author": {
77
"name": "moshcoder",
88
"url": "https://moshcode.sh"

plugins/crypto/README.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@ across Alpaca's US crypto venue.
66

77
| command | what it does |
88
| --- | --- |
9-
| `/crypto:crypto BTC` | price, technicals, score, supply, order book |
9+
| `/crypto:help` | this list, in the engine |
10+
| `/crypto:report BTC` | price, technicals, score, supply, order book |
1011
| `/crypto:quote ETH-USD` | latest trade and quote, with the spread in bps |
12+
| `/crypto:lookup bitcoin` | asset name → `BTC/USD` |
1113
| `/crypto:book BTC-USD` | top of the order book, both sides |
1214
| `/crypto:bars ETH-USD` | historical OHLCV at any supported timeframe |
1315
| `/crypto:spark BTC ETH SOL` | recent moves across pairs, ranked |
1416
| `/crypto:pairs` | every supported pair, grouped by quote asset |
15-
| `/crypto:coin bitcoin` | asset name → `BTC/USD` |
17+
18+
The first four names mean the same thing in `stocks@moshcode``help`,
19+
`report`, `quote`, `lookup` — so knowing one plugin gets you half the other.
20+
The rest are the parts a 24/7 venue has and equities do not: a live order book,
21+
arbitrary timeframes, and cross-pair comparison.
1622

1723
Pairs are accepted as `BTC`, `BTC-USD`, `BTC/USD` or `BTCUSD`. A bare asset
1824
resolves to that asset's USD pair.
@@ -50,9 +56,9 @@ Point the commands at another instance with `MOSHCODE_ADVISOR_URL`.
5056
## Why this is separate from `stocks`
5157

5258
They answer different questions from different data, and share only a hostname.
53-
A `/stocks:stocks` report is a **stored snapshot** built from transcripts, SEC
59+
A `/stocks:report` report is a **stored snapshot** built from transcripts, SEC
5460
fundamentals and extracted signals — its risk is a stale price read as a live
55-
one. A `/crypto:crypto` report is a **live venue read** with no transcripts, no
61+
one. A `/crypto:report` report is a **live venue read** with no transcripts, no
5662
filings and no signals — its risk is the opposite: a price that is accurate to
5763
the second and stale by the time you act on it.
5864

plugins/crypto/commands/help.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
description: What the crypto plugin can do, and the exact command names to type.
3+
---
4+
5+
## Task
6+
7+
List what this plugin provides. Do not call any tool — everything needed is
8+
below. Render it as a compact table, then the notes.
9+
10+
| command | what it does |
11+
| --- | --- |
12+
| `/crypto:report <PAIR>` | the full report — price, technicals, score, supply, order book |
13+
| `/crypto:quote <PAIR>` | the short answer — latest trade, bid/ask, spread |
14+
| `/crypto:lookup <name>` | asset name → pair (`bitcoin``BTC/USD`) |
15+
| `/crypto:book <PAIR>` | top of the order book, both sides |
16+
| `/crypto:bars <PAIR>` | historical OHLCV at any supported timeframe |
17+
| `/crypto:spark <PAIR…>` | recent moves across several pairs, ranked |
18+
| `/crypto:pairs` | every supported pair, grouped by quote asset |
19+
20+
## Notes to pass on
21+
22+
- Pairs are accepted as `BTC`, `BTC-USD`, `BTC/USD` or `BTCUSD`. A bare asset
23+
resolves to that asset's USD pair.
24+
- Every command name is namespaced `/crypto:…`. A bare `/report` is not a
25+
command — Claude Code always prefixes plugin commands with the plugin name.
26+
- `stocks@moshcode` is the sibling plugin, and the four shared names mean the
27+
same thing there: `/stocks:report`, `/stocks:quote`, `/stocks:lookup`,
28+
`/stocks:help`. It adds `/stocks:signals`, `/stocks:research`,
29+
`/stocks:reports` and `/stocks:discover` — transcript and filing work that
30+
has no crypto equivalent.
31+
- **These are live venue reads, not stored snapshots** — the opposite of the
32+
stocks plugin. Prices are Alpaca's US crypto venue alone and can differ
33+
materially from other exchanges. Crypto trades 24/7: no close, no halt.
34+
- The crypto technical score counts venue-local liquidity, so it is **not
35+
comparable** to a `/stocks:report` score. Do not rank the two against
36+
each other.
37+
38+
If the user asked for something no command covers, say so rather than
39+
improvising one that does not exist.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ Fallback: `curl -sS "https://advis0r.com/api/crypto/lookup?q=<url-encoded>&limit
2828
match is the one they meant.
2929
- No match: say this venue lists no such pair, and do not invent a symbol. The
3030
coin may exist and simply not be listed here — those are different answers.
31-
- Offer `/crypto:crypto <PAIR>` for the match you land on.
31+
- Offer `/crypto:report <PAIR>` for the match you land on.

plugins/crypto/commands/pairs.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ URL-safe spelling (`BTC-USD`) used in paths; `symbol` is canonical (`BTC/USD`).
2525
different markets with three different liquidity profiles.
2626
- **`idle` means listed but not currently printing trades** — it is not the same
2727
as unsupported. Show idle pairs, marked, rather than filtering them out.
28-
- If the user was looking for a specific coin, use `/crypto:coin <name>` instead of
28+
- If the user was looking for a specific coin, use `/crypto:lookup <name>` instead of
2929
scanning this list for them.
3030
- This is the coverage of one venue, not of crypto. A coin missing here is
3131
missing *from Alpaca's US venue*.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ resolves to that asset's USD pair.
4242
- Crypto trades 24/7 with no circuit breakers and no market close. Never
4343
describe a crypto price as "at the close" or "premarket".
4444
- State `generatedAt` / `fetchedAt`. This is a live read, so it goes stale in
45-
seconds, not days — the opposite failure mode from a stored `/stocks:stocks` report.
45+
seconds, not days — the opposite failure mode from a stored `/stocks:report` report.
4646
- The score's liquidity component counts venue-local volume only, so it is
47-
**not comparable** to an equity's score from `/stocks:stocks`. Do not rank the two
47+
**not comparable** to an equity's score from `/stocks:report`. Do not rank the two
4848
against each other.
4949
- End with the response's own `disclaimer`. This is research, not advice.
5050
- Link the shareable page: `https://advis0r.com/crypto/<PAIR>`.

plugins/crypto/commands/spark.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ Fallback: `curl -sS "https://advis0r.com/api/crypto/sparklines?symbols=BTC-USD,E
3232
- Name the window (`start``end`) and the period. "Up 5%" over 24h and over 7d
3333
are different claims.
3434
- Do not extrapolate a trend from 24 points, and do not call a direction
35-
"momentum" without the technicals to back it — `/crypto:crypto <PAIR>` has those.
35+
"momentum" without the technicals to back it — `/crypto:report <PAIR>` has those.
3636
- End with the response's own `disclaimer`.

plugins/stocks/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
33
"name": "stocks",
44
"description": "Equity research slash commands backed by advis0r.com: scored reports, extracted signals, transcript search, company-name lookup, and ranked watchlists.",
5-
"version": "0.2.0",
5+
"version": "0.3.0",
66
"author": {
77
"name": "moshcoder",
88
"url": "https://moshcode.sh"

plugins/stocks/README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,23 @@ and ranked watchlists.
66

77
| command | what it does |
88
| --- | --- |
9-
| `/stocks:stocks NVDA` | score, technicals, fundamentals, thesis, signals, sources |
9+
| `/stocks:help` | this list, in the engine |
10+
| `/stocks:report NVDA` | score, technicals, fundamentals, thesis, signals, sources |
11+
| `/stocks:quote NVDA` | the short answer — price, score, staleness |
12+
| `/stocks:lookup rivian` | company name → `RIVN` |
1013
| `/stocks:signals AAPL` | what was actually said, quoted and sourced |
1114
| `/stocks:research data center` | full-text search across every indexed transcript |
12-
| `/stocks:lookup rivian` | company name → `RIVN` |
1315
| `/stocks:reports` | every stored report, best score first |
1416
| `/stocks:discover fusion` | a ranked watchlist for a topic (slow) |
1517

18+
The first four names mean the same thing in `crypto@moshcode``help`,
19+
`report`, `quote`, `lookup` — so knowing one plugin gets you half the other.
20+
The rest are the parts equities have and crypto does not: transcripts, filings,
21+
and a watchlist built from them.
22+
23+
Note `report` and `reports` are different commands: singular takes a symbol and
24+
returns one write-up, plural takes nothing and lists the whole stored index.
25+
1626
The `stocks:` prefix is not optional. Claude Code namespaces every plugin
1727
command as `/<plugin>:<command>` — always, not only when two plugins collide —
1828
so a bare `/stocks` answers `Unknown command`. Typing `/` and picking from the
@@ -24,11 +34,11 @@ command, not this plugin's.)
2434
## Upgrading from `ticker@moshcode`
2535

2636
This plugin used to be called `ticker`. Both it and its headline command were
27-
renamed so the name says which market it covers, now that `/crypto:crypto` sits beside
37+
renamed so the name says which market it covers, now that `/crypto:report` sits beside
2838
it.
2939

3040
Installing the new one does **not** replace the old one — engines install
31-
plugins side by side, so `/stocks:stocks` would come from two plugins at once. Remove
41+
plugins side by side, so `/stocks:report` would come from two plugins at once. Remove
3242
the old id first:
3343

3444
```bash

0 commit comments

Comments
 (0)