Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ or miss one that does. A test fails the build when it drifts.
| `moshcode engines` | engines | list engines and installation status |
| `moshcode tools` | tools | list workflow tools and installation status |
| `moshcode trade` | tools | look up markets and trade through Alpaca |
| `moshcode ticker` <br>`advisor` | tools | equity research from advis0r.com |
| `moshcode stocks` <br>`advisor` | tools | equity research from advis0r.com |
| `moshcode crypto` <br>`coins` | tools | crypto market data from advis0r.com |
| `moshcode plugin` <br>`plugins` | extend | install moshcode's slash commands into Claude Code |
| `moshcode commands` | script | list built-in moshscript commands |
Expand Down Expand Up @@ -214,34 +214,34 @@ Alpaca's CLI has no confirmation prompts; `--submit` intentionally removes
MoshCode's preview guard. Live trading additionally requires Alpaca's `--live`
opt-in or corresponding environment setting.

### Equity research (`moshcode ticker`)
### Equity research (`moshcode stocks`)

Where `trade` is Alpaca's order book, `ticker` is the research desk:
Where `trade` is Alpaca's order book, `stocks` is the research desk:
[advis0r.com](https://advis0r.com/api)'s public read-only API, rendered in the
pit. No key, no login, no write routes, no binary to install:

```sh
moshcode ticker NVDA # score, technicals, fundamentals, thesis, signals
moshcode ticker lookup rivian # company name → RIVN
moshcode ticker signals AAPL # what was said, quoted and sourced
moshcode ticker search "data center" # across every indexed transcript
moshcode ticker reports --limit 10 # the stored index, best score first
moshcode ticker discover fusion # a ranked watchlist (slow — analyzes each candidate)
moshcode ticker open NVDA # the shareable report page
moshcode stocks NVDA # score, technicals, fundamentals, thesis, signals
moshcode stocks lookup rivian # company name → RIVN
moshcode stocks signals AAPL # what was said, quoted and sourced
moshcode stocks search "data center" # across every indexed transcript
moshcode stocks reports --limit 10 # the stored index, best score first
moshcode stocks discover fusion # a ranked watchlist (slow — analyzes each candidate)
moshcode stocks open NVDA # the shareable report page
```

Add `--json` to any of them for the raw response. The same facade is `/ticker …`
Add `--json` to any of them for the raw response. The same facade is `/stocks …`
in the pit, and `MOSHCODE_ADVISOR_URL` points it at another instance.

Reports are **stored snapshots**, not live quotes: every response carries
`reportGeneratedAt` and every renderer prints it, alongside whether the price is
delayed and which feed produced it. Scores labelled `offline` come from
deterministic rules rather than a model. It is a research aid, not advice, and
nothing under `ticker` can place an order.
nothing under `stocks` can place an order.

### Crypto market data (`moshcode crypto`)

`crypto` is `ticker`'s sibling on the same host: advis0r's read-only crypto
`crypto` is `stocks`'s sibling on the same host: advis0r's read-only crypto
routes over Alpaca's US crypto venue, which trades 24/7 and needs no extra
subscription.

Expand All @@ -260,15 +260,15 @@ Pairs are accepted as `BTC`, `BTC-USD`, `BTC/USD` or `BTCUSD` — a bare asset
resolves to that asset's USD pair. `--json` gives the raw response, `/crypto …`
is the same facade in the pit, and `MOSHCODE_ADVISOR_URL` points it elsewhere.

Unlike a `ticker` report, this is a **live venue read**, not a stored snapshot —
Unlike a `stocks` report, this is a **live venue read**, not a stored snapshot —
there are no transcripts, no filings and no signals behind a crypto pair, and
the failure mode runs the other way: the price is accurate to the second and
stale by the time you act on it. Every response stamps when it was fetched.

The technical score counts venue-local liquidity, so it is **not comparable** to
an equity's score, and each response ships the `caveats` that say so. Prices are
Alpaca's US venue alone and can differ materially from other exchanges. Research
aid, not advice — and like `ticker`, nothing under `crypto` can place an order.
aid, not advice — and like `stocks`, nothing under `crypto` can place an order.

### Social posting from the pit

Expand Down Expand Up @@ -376,7 +376,7 @@ moshcode plugin install crypto # add the marketplace + install `crypto`
moshcode plugin remove ticker # take it back off
```

`ticker@moshcode` adds `/ticker`, `/signals`, `/research`, `/lookup`,
`ticker@moshcode` adds `/stocks`, `/signals`, `/research`, `/lookup`,
`/reports`, and `/discover` — the same advis0r research surface described above,
driven from inside a coding session.

Expand Down
6 changes: 3 additions & 3 deletions bin/moshcode.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { runUpgrade } from "../src/upgrade.mjs";
import { selfUpdateCommand } from "../src/selfupdate.mjs";
import { describeUninstall, uninstallPlan } from "../src/uninstall.mjs";
import { mcpCommand, pluginCommand, skillCommand } from "../src/integrations.mjs";
import { tickerCommand } from "../src/advisor.mjs";
import { stocksCommand } from "../src/advisor.mjs";
import { cryptoCommand } from "../src/crypto.mjs";
import { canOpenBrowser, openBrowser } from "../src/open-url.mjs";
import { locate, tilde } from "../src/pwd.mjs";
Expand Down Expand Up @@ -347,8 +347,8 @@ async function main() {
propagateExit(r.code, r.signal);
return;
}
if (cmd === "ticker" || cmd === "advisor") {
const code = await tickerCommand(rest, {
if (cmd === "stocks" || cmd === "advisor") {
const code = await stocksCommand(rest, {
openUrl: (url) => canOpenBrowser() && openBrowser(url),
});
if (code) process.exitCode = code;
Expand Down
4 changes: 2 additions & 2 deletions plugins/crypto/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ command falls back to `curl` against the same endpoints.

Point the commands at another instance with `MOSHCODE_ADVISOR_URL`.

## Why this is separate from `ticker`
## Why this is separate from `stocks`

They answer different questions from different data, and share only a hostname.
A `/ticker` report is a **stored snapshot** built from transcripts, SEC
A `/stocks` report is a **stored snapshot** built from transcripts, SEC
fundamentals and extracted signals — its risk is a stale price read as a live
one. A `/crypto` report is a **live venue read** with no transcripts, no
filings and no signals — its risk is the opposite: a price that is accurate to
Expand Down
4 changes: 2 additions & 2 deletions plugins/crypto/commands/crypto.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ resolves to that asset's USD pair.
- Crypto trades 24/7 with no circuit breakers and no market close. Never
describe a crypto price as "at the close" or "premarket".
- State `generatedAt` / `fetchedAt`. This is a live read, so it goes stale in
seconds, not days — the opposite failure mode from a stored `/ticker` report.
seconds, not days — the opposite failure mode from a stored `/stocks` report.
- The score's liquidity component counts venue-local volume only, so it is
**not comparable** to an equity's score from `/ticker`. Do not rank the two
**not comparable** to an equity's score from `/stocks`. Do not rank the two
against each other.
- End with the response's own `disclaimer`. This is research, not advice.
- Link the shareable page: `https://advis0r.com/crypto/<PAIR>`.
10 changes: 8 additions & 2 deletions plugins/ticker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,19 @@ and ranked watchlists.

| command | what it does |
| --- | --- |
| `/ticker NVDA` | score, technicals, fundamentals, thesis, signals, sources |
| `/stocks NVDA` | score, technicals, fundamentals, thesis, signals, sources |
| `/signals AAPL` | what was actually said, quoted and sourced |
| `/research data center` | full-text search across every indexed transcript |
| `/lookup rivian` | company name → `RIVN` |
| `/reports` | every stored report, best score first |
| `/discover fusion` | a ranked watchlist for a topic (slow) |

The headline command is `/stocks`, not `/ticker` — it was renamed so the verb
says what it covers, now that `/crypto` sits beside it. **The plugin itself is
still `ticker@moshcode`**, deliberately: renaming the plugin would force
everyone who already installed it to uninstall and reinstall, and an id is not
worth that. Existing installs pick `/stocks` up on the next plugin update.

## Install

```bash
Expand All @@ -31,7 +37,7 @@ session that is already running.

## How it works

Each command shells out to `moshcode ticker …`, which calls advis0r's public,
Each command shells out to `moshcode stocks …`, which calls advis0r's public,
read-only API. No key, no login, no write routes. With `moshcode` absent, every
command falls back to `curl` against the same endpoints.

Expand Down
4 changes: 2 additions & 2 deletions plugins/ticker/commands/discover.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
description: Build a ranked watchlist for a topic (slow — it analyzes each candidate).
argument-hint: "[topic]"
allowed-tools: Bash(moshcode ticker:*), Bash(curl -sS https://advis0r.com/api/:*)
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
---

## Task

Rank candidates for `$ARGUMENTS` (no topic → the default watchlist).

```bash
moshcode ticker discover $ARGUMENTS --limit 10 --json
moshcode stocks discover $ARGUMENTS --limit 10 --json
```

Fallback: `curl -sS --max-time 180 "https://advis0r.com/api/discover?topic=<url-encoded>&provider=offline&horizon=2&limit=10"`
Expand Down
6 changes: 3 additions & 3 deletions plugins/ticker/commands/lookup.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
description: Find a ticker symbol by company name (rivian → RIVN).
argument-hint: <company name>
allowed-tools: Bash(moshcode ticker:*), Bash(curl -sS https://advis0r.com/api/:*)
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
---

## Task

Resolve `$ARGUMENTS` to a ticker symbol.

```bash
moshcode ticker lookup $ARGUMENTS --limit 10 --json
moshcode stocks lookup $ARGUMENTS --limit 10 --json
```

Fallback: `curl -sS "https://advis0r.com/api/lookup?q=<url-encoded>&limit=10"`
Expand All @@ -22,6 +22,6 @@ Fallback: `curl -sS "https://advis0r.com/api/lookup?q=<url-encoded>&limit=10"`
## Rules

- Show every match with its exchange — "Delta" is an airline and a faucet company.
- Mark which ones have a report, and offer `/ticker <SYMBOL>` for those.
- Mark which ones have a report, and offer `/stocks <SYMBOL>` for those.
- One unambiguous match: say the symbol and go straight to offering the report.
- No match: say the *directory* has no match, and do not invent a symbol.
6 changes: 3 additions & 3 deletions plugins/ticker/commands/reports.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
description: Every stored advis0r research report, best score first.
argument-hint: "[--limit n] [--sort recent|score|ticker]"
allowed-tools: Bash(moshcode ticker:*), Bash(curl -sS https://advis0r.com/api/:*)
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
---

## Task

List the stored reports.

```bash
moshcode ticker reports $ARGUMENTS --json
moshcode stocks reports $ARGUMENTS --json
```

Fallback: `curl -sS "https://advis0r.com/api/reports?sort=score&limit=25"`
Expand All @@ -26,5 +26,5 @@ generatedAt }`, and `total` is how many exist.
- **`generatedAt` per row, always.** These are snapshots taken at different
times; a table that hides that reads as one consistent as-of date.
- A row with no `aiProvider` was scored deterministically, not by a model.
- Offer `/ticker <SYMBOL>` for anything worth a closer look.
- Offer `/stocks <SYMBOL>` for anything worth a closer look.
- This is a coverage list, not a recommendation list. Rank order is score order.
4 changes: 2 additions & 2 deletions plugins/ticker/commands/research.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
description: Full-text search across every indexed earnings transcript and article.
argument-hint: <words to search for>
allowed-tools: Bash(moshcode ticker:*), Bash(curl -sS https://advis0r.com/api/:*)
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
---

## Task

Search the transcript index for `$ARGUMENTS`.

```bash
moshcode ticker search $ARGUMENTS --limit 20 --json
moshcode stocks search $ARGUMENTS --limit 20 --json
```

Fallback: `curl -sS "https://advis0r.com/api/search?q=<url-encoded>&limit=20"`
Expand Down
4 changes: 2 additions & 2 deletions plugins/ticker/commands/signals.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
---
description: What was actually said about a ticker — extracted signals with quotes and sources.
argument-hint: <SYMBOL>
allowed-tools: Bash(moshcode ticker:*), Bash(curl -sS https://advis0r.com/api/:*)
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
---

## Task

List the extracted signals for `$ARGUMENTS`.

```bash
moshcode ticker signals $ARGUMENTS --json
moshcode stocks signals $ARGUMENTS --json
```

Fallback: `curl -sS "https://advis0r.com/api/signals?ticker=$ARGUMENTS"`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
description: Research one ticker — score, technicals, fundamentals, thesis, signals, and sources.
argument-hint: <SYMBOL>
allowed-tools: Bash(moshcode ticker:*), Bash(curl -sS https://advis0r.com/api/:*)
allowed-tools: Bash(moshcode stocks:*), Bash(curl -sS https://advis0r.com/api/:*)
---

## Task
Expand All @@ -11,7 +11,7 @@ Pull the stored research report for `$ARGUMENTS` and summarize it for the user.
Run:

```bash
moshcode ticker $ARGUMENTS --json
moshcode stocks $ARGUMENTS --json
```

If `moshcode` is not installed, fall back to the API directly:
Expand Down
Loading
Loading