feat(ticker): equity research in the pit, shipped as an installable plugin - #318
Merged
Conversation
…lugin `trade` could quote a price and place an order, but nothing answered the question that comes first. `moshcode ticker <SYMBOL>` renders advis0r.com's stored research report — score, technicals, SEC fundamentals, thesis, signals with their sources — plus verbs for signals, transcript search, company-name lookup, the stored report index, ranked discovery, and coverage stats. Same surface as `/ticker` at the mosh prompt. Every route used is public, read-only and unauthenticated, so there is no login verb and no write path. Two rules the renderers enforce rather than document: a stored snapshot always prints its `reportGeneratedAt`, whether the price is delayed and which feed produced it — a stale price dressed as a live one is the one failure mode that costs money — and the API's own disclaimer travels with the data. Also publishes moshcode's first Claude Code marketplace. `moshcode plugin install` adds it and installs `ticker@moshcode`, which provides /ticker, /signals, /research, /lookup, /reports and /discover inside the engine. The fan-out follows the same contract as skills (prd/0003 R8): every engine appears in the summary, and the ones with no plugin primitive say so. See prd/0008. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
||
| test("the source is overridable, so an unreleased plugin is installable", () => { | ||
| assert.equal(marketplaceSource({}), "moshcoder/moshcode"); | ||
| assert.equal(marketplaceSource({ MOSHCODE_PLUGIN_SOURCE: "/tmp/checkout" }), "/tmp/checkout"); |
ThreatCrush Security Scan93 finding(s) HIGH/CRITICAL: 50 | MEDIUM: 43
…and 43 more. Full results in the Security tab. Snippets are redacted; ThreatCrush never prints matched credential material. |
ralyodio
marked this pull request as ready for review
August 6, 2026 15:34
Merged
ralyodio
added a commit
that referenced
this pull request
Aug 6, 2026
Bump to v0.26.0, releasing two features that have been sitting on main unreleased: posting to Bluesky and Nostr from the pit (#317), and equity research via `moshcode ticker` / `/ticker` backed by advis0r.com, shipped alongside moshcode's first Claude Code plugin marketplace (#318). Minor rather than patch: both add commands, neither changes an existing one. This release is also what makes the `ticker` plugin's primary path work. install.sh serves the latest release tarball, not main, so every machine running the installed binary reports `unknown command "ticker"` until a release carries it — the plugin's slash commands fall back to curl in the meantime, which works but skips the rendering the verb exists to do. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
/tickerand its siblings to moshcode, backed by advis0r.com's API, and ships them as an installable Claude Code plugin.moshcode ticker//tickerA bare symbol is the report, so the headline case stays the shortest thing to type.
--jsonon any verb gives the raw response.MOSHCODE_ADVISOR_URLpoints it at another instance.Every route used is public, read-only and unauthenticated — no login verb, no write path, no credentials held. The authenticated routes (
/api/digest,/api/report/regenerate) are deliberately out of scope.Two rules the renderers enforce rather than merely document:
reportGeneratedAt, whether the price isdelayed, and which feed produced it. Presenting a stale price as a live quote is the one failure mode here that costs someone money.disclaimertravels with the data into the output.A model-written thesis is labelled with its provider and model; a deterministic one is labelled
offline. Missing sections (SEC or the market feed rate-limiting) degrade the report rather than preventing one.moshcode plugin— the marketplacemoshcode already fans MCP servers and skills out across engines but published none of its own commands. This adds
.claude-plugin/marketplace.jsonand atickerplugin providing/ticker,/signals,/research,/lookup,/reports,/discoverinside the engine.moshcode plugin install # marketplace add + plugin install moshcode plugin list moshcode plugin remove tickerThe fan-out follows the same contract as skills (prd/0003 R8): every engine appears in the summary, and the ones with no plugin primitive say so instead of being silently omitted.
MOSHCODE_PLUGIN_SOURCE=.installs from a checkout.Verification
test/advisor.test.mjsandtest/plugins.test.mjs).claude plugin validatepasses on both manifests,--strictincluded. It caught a real bug first: an unquoted[--limit n]inargument-hintis a YAML flow sequence, and the parse error silently drops every frontmatter field. There is now a test for that shape.Drift guards required regenerating the README command table and the PRD index; both are generated, not hand-edited.
Notes
Design and rationale in
prd/0008-ticker-research-and-plugin-marketplace.md.Scored equity research now sits one verb away from an order-placing CLI. The separation is structural rather than advisory:
tickerhas no write path,tradekeeps its preview-by-default guard, and nothing in the plugin can place an order.🤖 Generated with Claude Code