@coinrithm/mcp-trading 0.7.5 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,197 +1,310 @@
1
- # Changelog
2
-
3
- All notable changes to `@coinrithm/mcp-trading` are documented here. The package
4
- ships two binaries — `coinrithm-mcp` (the MCP server) and `coinrithm-agent` (the
5
- self-host agent runner) — versioned together. The CoinRithm **API contract** is
6
- versioned separately (see `openapi.yaml` `info.version`, currently `1.6.0`).
7
-
8
- ## 0.7.5
9
-
10
- **Release-hygiene bump. Everything below was already merged but never
11
- reached npm** the 0.7.4 tarball was published 2026-07-26T23:01:11Z and
12
- five commits landed after that instant without a version bump, so the
13
- repository's 0.7.4 and the published 0.7.4 were different code under one
14
- version number. This release makes the published artifact match the
15
- source again.
16
-
17
- - **Security.** MCP dependency audit fixes, 6 findings to 0 (`da65e9e`).
18
- Anyone on published 0.7.4 is running the pre-audit dependency set.
19
- - **`pm_data` Gemini exposure** for agents (`3ab04ae`).
20
- - **Venue methodology and health** exposed as tools (`74cc495`).
21
- - **Reproducible decision receipts** persisted by the agent runner
22
- (`8bebc9e`).
23
- - **Docs.** Contract version drift corrected and the placeholder SDK
24
- README replaced, so the docs stop advertising an install that 404s
25
- (`6d61b92`).
26
-
27
- No tool was renamed or removed; this is additive plus a dependency
28
- refresh.
29
-
30
- Publishing this package is a **manual** step `publish-mcp.yml` only
31
- pushes `server.json` to the MCP registry, it does not run `npm publish`.
32
- That asymmetry is exactly how the drift above accumulated unnoticed.
33
-
34
- ## 0.7.4
35
-
36
- Docs-only. No tool behavior change, no API-surface change.
37
-
38
- - **Acceptable Use of Market Data.** The README (root and this package) and
39
- `openapi.yaml` (`info.termsOfService`, `info.description`, and the
40
- `public-pm-data` tag) now reference and summarize CoinRithm's licensing
41
- flow-down restriction on Market Data from third-party prediction-market
42
- venues: read-only use for paper-trading context and settled-outcome
43
- scoring only — no model training/fine-tuning/benchmarking, no
44
- redistribution or bulk-extraction, no use to build a competing product.
45
- Full terms: <https://www.coinrithm.com/en/terms-of-use>
46
-
47
- ## 0.7.3
48
-
49
- Quality-engine surfaces + independent forecasts. Additive; no breaking change.
50
-
51
- - **Quality verdicts in tool responses.** `discover_pm_markets`, `pm_quote`, and
52
- the `pm_data_*` tools now surface the persisted truth-engine `quality` object
53
- (`decisionEligible`, warning/block reason codes, `policyVersion`, `assessedAt`).
54
- Markets with critical failures stay visible but cannot drive paper opens or
55
- alerts.
56
- - **`openBlocked` preview on `pm_quote`.** Quotes preview the open-time quality
57
- gate (`openBlocked` + `openBlockReasons`), so an agent can skip a market that
58
- would 422 before burning the open attempt. The self-host runner
59
- (`coinrithm-agent`) does this skip automatically.
60
- - **Independent forecasts in the runner.** The self-host agent runner elicits the
61
- model's OWN probability (judged from the question/resolution criteria/deadline,
62
- never anchored to the market price) and submits it as `forecastProbability` on
63
- PM opens feeding the public calibration dataset with proper-scoring-rule
64
- forecasts. Clamped to [1,99]; omitted (never faked) when the model does not
65
- produce one; `HOUSE_AGENT_FORECAST_ENABLED=false` disables.
66
- - **`crossPlatform` on event lists** documented in the API contract: sibling
67
- venues pricing the same question, on list rows.
68
- - **ForecastEx venue truth.** Public MCP discovery copy and registry metadata
69
- now describe all 11 live venues, including ForecastEx.
70
- - **Contract synchronization.** Runner templates and example bundles pin the
71
- served OpenAPI 1.6.0 contract; canonical scorecard paths are unambiguous.
72
-
73
- ## 0.7.2
74
-
75
- Docs-truth + privacy release. No tool behavior change, no API-surface change.
76
-
77
- - **Ten venues in the public listing.** `pm_data_*` tool copy, the README, and
78
- `server.json` now name all ten venues (adds Futuur and Myriad). npm `0.7.1` was
79
- published before those landed, so the registry listing still advertised "eight
80
- venues"; npm versions are immutable, so correcting the public listing required
81
- a new release.
82
- - **`source` parameter description** on `pm_data_events` / `pm_data_event_detail`
83
- now enumerates all ten venue slugs. Accepted values are unchanged — this is
84
- description text only, which is why it is a patch and not a minor.
85
- - **Privacy.** Raw model output is no longer persisted, enforcing the package's
86
- no-chain-of-thought promise.
87
- - **New tripwire.** `server.json` (the MCP-registry listing) is now guarded
88
- against version and venue-count drift; it had no guard, which is how it went
89
- stale in the first place.
90
- - Refreshed stale Arena-gate example copy.
91
-
92
- ## 0.7.1
93
-
94
- Docs + registry-metadata release; no tool behavior changes.
95
-
96
- - **README refresh**: the keyless `pm_data_*` data surface is now front and
97
- center8 venues (Polymarket, Kalshi, Smarkets, Limitless, Manifold,
98
- Metaculus, PredictIt, Rothera the "seven venues" line predated Rothera),
99
- the anonymous hosted-endpoint path, and the `referenceProbability` /
100
- `volumeHistory` fields the data tools return.
101
- - **`server.json`**: hosted endpoint's `Authorization` header marked optional
102
- (the `pm_data_*` tools work anonymously — verified live) and the server
103
- description now leads with the keyless data surface.
104
- - Ships the post-0.7.0 commits: `pm_data_event` advertises `volumeHistory`,
105
- `pm_data_events` advertises `referenceProbability` on list items, and the
106
- hosted MCP root (`GET /`) serves a self-describing JSON landing (with a
107
- 405 + hint on `GET /mcp`).
108
-
109
- ## 0.7.0
110
-
111
- (Retroactive entry released 2026-07-05 without a changelog note.)
112
-
113
- - **Four keyless `pm_data_*` tools** CoinRithm's free public cross-venue
114
- prediction-market dataset over MCP, no API key required and yours is never
115
- attached: `pm_data_overview` (market-wide stats), `pm_data_events`
116
- (cross-venue event list), `pm_data_event` (detail incl.
117
- `crossSourceMatches` + resolution evidence), `pm_data_whales`
118
- (large-trade tape).
119
-
120
- ## 0.5.0
121
-
122
- Agent-runner quality + reliability release. `coinrithm-agent` got materially
123
- smarter and less noisy; `coinrithm-mcp` is unchanged in shape. Bundles the work
124
- since 0.4.0.
125
-
126
- - **Prediction markets are a first-class venue** in the decide prompt: a short
127
- `pmN` ref so small models trade PM reliably, eligible-outcome filtering (only
128
- backend-openable outcomes reach the model), and futures-capped agents steered
129
- to PM (a separate budget) instead of re-rejecting.
130
- - **PM anti-churn now actually effective.** The candidate list is pre-filtered
131
- to exclude markets the agent already holds, and the runner + server both block
132
- re-betting a held market+outcome (no more one-agent, 25-identical-bets churn).
133
- An earlier version read the wrong `/positions/pm` fields and was silently dead;
134
- fixed.
135
- - **Settlement-feedback learning loop.** The agent sees how its own recent bets
136
- actually resolved (win/loss/void + realized PnL) as reflective context, so it
137
- learns from outcomes across cycles.
138
- - **Per-trade reasoning stays honest about the market.** A multi-action decision
139
- no longer stamps its primary rationale onto a secondary trade about a different
140
- market the trade's public Arena "why" always matches the market it's on.
141
- - **Futures reliability.** The model is unblinded to per-position mark /
142
- liquidation / stop / take-profit prices; take-profit is auto-clamped to a valid
143
- R:R target off the stop (kills the `take_profit_not_*_mark` reject waves); and a
144
- marking-down PM book now trips the equity-drawdown kill-switch too.
145
- - **News capability.** Recent high-importance news for the watchlist coins is fed
146
- into the decide context as a market-catalyst layer.
147
- - **Robustness + contract accuracy.** Scheduler/runner hardening, flat-state
148
- prompt steers (weak models stop hallucinating closes), manage-enum
149
- normalization, and the PM contract now documents real entry friction rather
150
- than a disclose-only stance.
151
- - **Security.** `hono` bumped to 4.12.27 (high-severity advisories: serve-static
152
- path traversal, CORS wildcard-with-credentials, body-limit bypass).
153
- - **Docs.** The npm README leads with value / free / OKF / Studio; stale
154
- scheduler and `minDecidedTrades` claims corrected.
155
-
156
- ## 0.4.0
157
-
158
- - **Deterministic scorecard engine (`computeScorecard`).** The reproducible-
159
- evaluation engine for `coinrithm.agent.scorecard.v1` — pure math over an
160
- agent's realized track record (no network, no model): realized PnL, win rate,
161
- expectancy, profit factor, reward-to-risk, Sharpe, Sortino, deflated /
162
- probabilistic Sharpe (Bailey & López de Prado skill vs luck with a multiple-
163
- testing penalty), max drawdown, and Brier + ECE calibration for probabilistic
164
- calls. Same inputs identical metrics **and** a sha256 `contentHash` of the
165
- canonicalized result, so a scorecard whose hash doesn't reproduce isn't
166
- trusted. Metrics are computed AFTER the run from immutable evidence (leakage-
167
- separation), so tuning-to-the-metric is structurally impossible. Returns
168
- `null` for thin records — never a fabricated number.
169
- - **Resolver: committable file metadata + functionality pin.** The OKF resolver
170
- now carries per-file metadata and pins functionality through resolution, so a
171
- bundle's behavior is reproducible from its committed files.
172
-
173
- ## 0.3.0
174
-
175
- - **Agent risk config: coin deny-list (`blocklist`).** `risk.blocklist` lets an
176
- agent name symbols it must never open, even if they are on the watchlist —
177
- deny wins over allow. Enforced in the runner's decision validator (rejects
178
- `futures_open` / `spot_order` on a denied symbol) and surfaced in the system
179
- prompt, so the model is told the boundary and the runner re-checks it.
180
- - **Docs: Open Knowledge Format positioning.** Clarified that a CoinRithm agent
181
- is an OKF bundle a portable directory of markdown + frontmatter that is
182
- model-agnostic (run the same definition on any model). Develop and prove it
183
- free on paper, then run it anywhere.
184
- - npm keywords refreshed (`open-knowledge-format`, `okf`, `model-agnostic`,
185
- `gemini`) for registry discovery.
186
-
187
- ## 0.2.0
188
-
189
- - Added the **`coinrithm-agent`** self-host runner binary alongside the MCP
190
- server: a folder-as-architecture (OKF) agent you bring your own model key to,
191
- with caps enforced by the runner (not the model), dry-run by default,
192
- paper-only.
193
-
194
- ## 0.1.x
195
-
196
- - Initial `coinrithm-mcp` MCP server: reads, quotes, scoped spot/futures/PM
197
- writes, ledger export, and Agent Arena integration over a user-minted API key.
1
+ # Changelog
2
+
3
+ All notable changes to `@coinrithm/mcp-trading` are documented here. The package
4
+ ships two binaries — `coinrithm-mcp` (the MCP server) and `coinrithm-agent` (the
5
+ self-host agent runner) — versioned together. The CoinRithm **API contract** is
6
+ versioned separately (see `openapi.yaml` `info.version`, currently `1.7.0`).
7
+
8
+ ## 0.7.7
9
+
10
+ Reliability release. Every change here came from a live production failure, not
11
+ from a roadmap. Additive: no tool renamed or removed, and the API **contract
12
+ stays 1.7.0** because nothing on the documented surface changed.
13
+
14
+ **Model requests are now built from a declared capability table, not
15
+ assumptions.** `providerCapabilities.ts` states, per model family, which
16
+ parameter carries the completion budget, whether a non-default temperature is
17
+ allowed, and what extra body fields the family needs. Two failures this fixes:
18
+
19
+ - **OpenAI's current models rejected our requests outright.** `gpt-5*` and
20
+ `o*` refuse `max_tokens` and any non-default `temperature`; they take
21
+ `max_completion_tokens`. The family is detected by MODEL id, not just the
22
+ provider name, so an OpenAI-compatible gateway serving `gpt-5` gets the same
23
+ shape. If you brought your own OpenAI key, this is why it now works.
24
+ - **NVIDIA Nemotron models emitted a think-chain where the JSON decision
25
+ belonged**, which failed every cycle. The `chat_template_kwargs.enable_thinking=false`
26
+ switch and the "detailed thinking off" system hint are now encoded as data
27
+ rather than re-learned by failing.
28
+
29
+ **New: `probeDecisionContract()`.** An HTTP 200 is not proof a route can run an
30
+ agent. Both production failure modes returned 200s: a think-chain in the JSON
31
+ slot, and an empty completion because a reasoning model spent its whole budget
32
+ before answering. The probe sends a canned mini-observation through the REAL
33
+ decision parser at a >=1024 completion allowance and classifies the result as
34
+ `http`, `empty` or `parse`. Use it before adopting any model id; provider
35
+ catalogs list ids that 404 on invoke.
36
+
37
+ **Provider trouble no longer disables an agent.** A permanent-looking model
38
+ error (404/410/decommissioned) used to disable the agent after a threshold. On
39
+ 2026-08-26 NVIDIA end-of-lifed an entire model line and 35 agents died on that
40
+ path. The runner now reports a hold and keeps retrying each cadence, recovering
41
+ by itself when the provider does. Disables remain for what deserves them:
42
+ revoked credentials, drawdown, kill-switch, user action.
43
+
44
+ **Failures carry structured metadata.** A failed `decide()` now returns
45
+ `status` and, when the provider sends one, `retryAfterMs` (parsed from
46
+ `Retry-After` in both delta-seconds and HTTP-date form, capped at an hour), so
47
+ a caller can tell a 429 from a 5xx without parsing strings. Error text is
48
+ unchanged.
49
+
50
+ **`ClientConfig.extraHeaders`.** Headers attached to every request, spread
51
+ before auth so they can never clobber it. Self-host has nothing to put here;
52
+ it exists so CoinRithm's own hosted scheduler can present its attestation
53
+ channel.
54
+
55
+ **Model names corrected throughout.** The retired Llama 3.x line is gone from
56
+ the README, the runtime defaults and the `quant-reference` example, which is
57
+ relocked onto `nvidia/nemotron-3-nano-30b-a3b`.
58
+
59
+ ## 0.7.6
60
+
61
+ Agent capability release: universe discovery, first-class behavioral guards,
62
+ and the hosted prose budget made visible. Additive no tool renamed or
63
+ removed. Contract moves to **1.7.0** (two keyless paths declared).
64
+
65
+ **New: agents can look beyond their own watchlist.**
66
+
67
+ - **`get_crypto_movers` tool.** Keyless scan of the tracked coin universe for
68
+ the biggest 24h gainers or losers. Rows carry `coinId`, `symbol`, `name`,
69
+ `slug`, `change24hPct`, `priceUsd`.
70
+ - **`universe_scan` capability** for the self-host runner. Each cycle it pulls
71
+ the top movers, promotes the strongest few into full watch entries marked
72
+ `discovered: true`, and passes the remainder as compact context. Watchlist
73
+ and blocklist symbols are excluded up front, so a discovered row can never
74
+ duplicate a configured pair or bypass the deny list.
75
+ - **Both now carry the coinId through.** The movers row's `ucid` IS the
76
+ `coinId` that `get_candles` / `get_market_context` / the futures quote path
77
+ take. It was previously stripped from the tool response and re-derived from
78
+ the SYMBOL via a resolve round-trip a wasted call per discovered mover and
79
+ a real correctness hazard, because symbols collide across listings and the
80
+ resolver could return a different coin than the one that actually moved.
81
+
82
+ **New: contract declares the endpoints the tools call.**
83
+
84
+ - `/api/coins/top-gainers` and `/api/coins/top-losers` are now in
85
+ `openapi.yaml` (tag `public-crypto-data`), so both SDKs can reach the
86
+ surface `get_crypto_movers` uses. Probe-verified against prod: bare array,
87
+ no envelope; `change24h` / `currentPrice` are decimal STRINGS; default
88
+ `limit` is 3 and out-of-range values return 400 rather than clamping.
89
+
90
+ **New: personality and boundaries are configurable, and documented.**
91
+
92
+ - **`character/guards.md`** — first-class hard behavioral guards, merged into
93
+ the strategy prose as a distinct section rather than buried in the thesis.
94
+ - **`examples/agents/pia-pump-fader`** a full bundle demonstrating
95
+ capabilities plus boundary configuration (watchlist/blocklist interaction,
96
+ the five-point risk gate, re-entry discipline).
97
+ - **`examples/agents/FORKING.md`** a file-by-file map of what is strategy
98
+ and what is plumbing, so a fork knows what it is allowed to change.
99
+ - **QUICKSTART** documents capabilities, and a docs-drift tripwire fails the
100
+ suite when a capability ships undocumented (`universe_scan` shipped
101
+ invisible in every user surface once; that cannot recur silently).
102
+
103
+ **Fixed.**
104
+
105
+ - **Hosted prose budget is validated, not discovered at deploy.**
106
+ `coinrithm-agent validate --hosted` now checks the 8,000-character merged
107
+ prose budget and reports the exact overage. A bundle could previously
108
+ validate clean and still be undeployable. YAML frontmatter is stripped
109
+ before the count (and before the model sees it — it was being fed in as if
110
+ it were strategy). `pia-pump-fader` was rebuilt to fit at 7,932.
111
+ - **Permanent failures stop being revived.** A disabled agent whose model is
112
+ gone or whose key is invalid is no longer resurrected by the scheduler's
113
+ revive pass; only transient failures are retried.
114
+ - **Fresh scaffolds are no longer bricked** by the capabilities field, and
115
+ action-confidence tolerance was widened to match what models actually emit.
116
+ - **False market-data licensing assertion corrected** in both READMEs.
117
+
118
+ ⚠ Publishing to npm remains a **manual** step — `publish-mcp.yml` pushes
119
+ `server.json` to the MCP registry only.
120
+
121
+ ## 0.7.5
122
+
123
+ **Release-hygiene bump. Everything below was already merged but never
124
+ reached npm** — the 0.7.4 tarball was published 2026-07-26T23:01:11Z and
125
+ five commits landed after that instant without a version bump, so the
126
+ repository's 0.7.4 and the published 0.7.4 were different code under one
127
+ version number. This release makes the published artifact match the
128
+ source again.
129
+
130
+ - **Security.** MCP dependency audit fixes, 6 findings to 0 (`da65e9e`).
131
+ Anyone on published 0.7.4 is running the pre-audit dependency set.
132
+ - **`pm_data` Gemini exposure** for agents (`3ab04ae`).
133
+ - **Venue methodology and health** exposed as tools (`74cc495`).
134
+ - **Reproducible decision receipts** persisted by the agent runner
135
+ (`8bebc9e`).
136
+ - **Docs.** Contract version drift corrected and the placeholder SDK
137
+ README replaced, so the docs stop advertising an install that 404s
138
+ (`6d61b92`).
139
+
140
+ No tool was renamed or removed; this is additive plus a dependency
141
+ refresh.
142
+
143
+ Publishing this package is a **manual** step — `publish-mcp.yml` only
144
+ pushes `server.json` to the MCP registry, it does not run `npm publish`.
145
+ That asymmetry is exactly how the drift above accumulated unnoticed.
146
+
147
+ ## 0.7.4
148
+
149
+ Docs-only. No tool behavior change, no API-surface change.
150
+
151
+ - **Acceptable Use of Market Data.** The README (root and this package) and
152
+ `openapi.yaml` (`info.termsOfService`, `info.description`, and the
153
+ `public-pm-data` tag) now reference and summarize CoinRithm's licensing
154
+ flow-down restriction on Market Data from third-party prediction-market
155
+ venues: read-only use for paper-trading context and settled-outcome
156
+ scoring only — no model training/fine-tuning/benchmarking, no
157
+ redistribution or bulk-extraction, no use to build a competing product.
158
+ Full terms: <https://www.coinrithm.com/en/terms-of-use>
159
+
160
+ ## 0.7.3
161
+
162
+ Quality-engine surfaces + independent forecasts. Additive; no breaking change.
163
+
164
+ - **Quality verdicts in tool responses.** `discover_pm_markets`, `pm_quote`, and
165
+ the `pm_data_*` tools now surface the persisted truth-engine `quality` object
166
+ (`decisionEligible`, warning/block reason codes, `policyVersion`, `assessedAt`).
167
+ Markets with critical failures stay visible but cannot drive paper opens or
168
+ alerts.
169
+ - **`openBlocked` preview on `pm_quote`.** Quotes preview the open-time quality
170
+ gate (`openBlocked` + `openBlockReasons`), so an agent can skip a market that
171
+ would 422 before burning the open attempt. The self-host runner
172
+ (`coinrithm-agent`) does this skip automatically.
173
+ - **Independent forecasts in the runner.** The self-host agent runner elicits the
174
+ model's OWN probability (judged from the question/resolution criteria/deadline,
175
+ never anchored to the market price) and submits it as `forecastProbability` on
176
+ PM opens feeding the public calibration dataset with proper-scoring-rule
177
+ forecasts. Clamped to [1,99]; omitted (never faked) when the model does not
178
+ produce one; `HOUSE_AGENT_FORECAST_ENABLED=false` disables.
179
+ - **`crossPlatform` on event lists** documented in the API contract: sibling
180
+ venues pricing the same question, on list rows.
181
+ - **ForecastEx venue truth.** Public MCP discovery copy and registry metadata
182
+ now describe all 11 live venues, including ForecastEx.
183
+ - **Contract synchronization.** Runner templates and example bundles pin the
184
+ served OpenAPI 1.6.0 contract; canonical scorecard paths are unambiguous.
185
+
186
+ ## 0.7.2
187
+
188
+ Docs-truth + privacy release. No tool behavior change, no API-surface change.
189
+
190
+ - **Ten venues in the public listing.** `pm_data_*` tool copy, the README, and
191
+ `server.json` now name all ten venues (adds Futuur and Myriad). npm `0.7.1` was
192
+ published before those landed, so the registry listing still advertised "eight
193
+ venues"; npm versions are immutable, so correcting the public listing required
194
+ a new release.
195
+ - **`source` parameter description** on `pm_data_events` / `pm_data_event_detail`
196
+ now enumerates all ten venue slugs. Accepted values are unchanged — this is
197
+ description text only, which is why it is a patch and not a minor.
198
+ - **Privacy.** Raw model output is no longer persisted, enforcing the package's
199
+ no-chain-of-thought promise.
200
+ - **New tripwire.** `server.json` (the MCP-registry listing) is now guarded
201
+ against version and venue-count drift; it had no guard, which is how it went
202
+ stale in the first place.
203
+ - Refreshed stale Arena-gate example copy.
204
+
205
+ ## 0.7.1
206
+
207
+ Docs + registry-metadata release; no tool behavior changes.
208
+
209
+ - **README refresh**: the keyless `pm_data_*` data surface is now front and
210
+ center — 8 venues (Polymarket, Kalshi, Smarkets, Limitless, Manifold,
211
+ Metaculus, PredictIt, Rothera — the "seven venues" line predated Rothera),
212
+ the anonymous hosted-endpoint path, and the `referenceProbability` /
213
+ `volumeHistory` fields the data tools return.
214
+ - **`server.json`**: hosted endpoint's `Authorization` header marked optional
215
+ (the `pm_data_*` tools work anonymously — verified live) and the server
216
+ description now leads with the keyless data surface.
217
+ - Ships the post-0.7.0 commits: `pm_data_event` advertises `volumeHistory`,
218
+ `pm_data_events` advertises `referenceProbability` on list items, and the
219
+ hosted MCP root (`GET /`) serves a self-describing JSON landing (with a
220
+ 405 + hint on `GET /mcp`).
221
+
222
+ ## 0.7.0
223
+
224
+ (Retroactive entry — released 2026-07-05 without a changelog note.)
225
+
226
+ - **Four keyless `pm_data_*` tools** — CoinRithm's free public cross-venue
227
+ prediction-market dataset over MCP, no API key required and yours is never
228
+ attached: `pm_data_overview` (market-wide stats), `pm_data_events`
229
+ (cross-venue event list), `pm_data_event` (detail incl.
230
+ `crossSourceMatches` + resolution evidence), `pm_data_whales`
231
+ (large-trade tape).
232
+
233
+ ## 0.5.0
234
+
235
+ Agent-runner quality + reliability release. `coinrithm-agent` got materially
236
+ smarter and less noisy; `coinrithm-mcp` is unchanged in shape. Bundles the work
237
+ since 0.4.0.
238
+
239
+ - **Prediction markets are a first-class venue** in the decide prompt: a short
240
+ `pmN` ref so small models trade PM reliably, eligible-outcome filtering (only
241
+ backend-openable outcomes reach the model), and futures-capped agents steered
242
+ to PM (a separate budget) instead of re-rejecting.
243
+ - **PM anti-churn — now actually effective.** The candidate list is pre-filtered
244
+ to exclude markets the agent already holds, and the runner + server both block
245
+ re-betting a held market+outcome (no more one-agent, 25-identical-bets churn).
246
+ An earlier version read the wrong `/positions/pm` fields and was silently dead;
247
+ fixed.
248
+ - **Settlement-feedback learning loop.** The agent sees how its own recent bets
249
+ actually resolved (win/loss/void + realized PnL) as reflective context, so it
250
+ learns from outcomes across cycles.
251
+ - **Per-trade reasoning stays honest about the market.** A multi-action decision
252
+ no longer stamps its primary rationale onto a secondary trade about a different
253
+ market — the trade's public Arena "why" always matches the market it's on.
254
+ - **Futures reliability.** The model is unblinded to per-position mark /
255
+ liquidation / stop / take-profit prices; take-profit is auto-clamped to a valid
256
+ R:R target off the stop (kills the `take_profit_not_*_mark` reject waves); and a
257
+ marking-down PM book now trips the equity-drawdown kill-switch too.
258
+ - **News capability.** Recent high-importance news for the watchlist coins is fed
259
+ into the decide context as a market-catalyst layer.
260
+ - **Robustness + contract accuracy.** Scheduler/runner hardening, flat-state
261
+ prompt steers (weak models stop hallucinating closes), manage-enum
262
+ normalization, and the PM contract now documents real entry friction rather
263
+ than a disclose-only stance.
264
+ - **Security.** `hono` bumped to 4.12.27 (high-severity advisories: serve-static
265
+ path traversal, CORS wildcard-with-credentials, body-limit bypass).
266
+ - **Docs.** The npm README leads with value / free / OKF / Studio; stale
267
+ scheduler and `minDecidedTrades` claims corrected.
268
+
269
+ ## 0.4.0
270
+
271
+ - **Deterministic scorecard engine (`computeScorecard`).** The reproducible-
272
+ evaluation engine for `coinrithm.agent.scorecard.v1` — pure math over an
273
+ agent's realized track record (no network, no model): realized PnL, win rate,
274
+ expectancy, profit factor, reward-to-risk, Sharpe, Sortino, deflated /
275
+ probabilistic Sharpe (Bailey & López de Prado — skill vs luck with a multiple-
276
+ testing penalty), max drawdown, and Brier + ECE calibration for probabilistic
277
+ calls. Same inputs → identical metrics **and** a sha256 `contentHash` of the
278
+ canonicalized result, so a scorecard whose hash doesn't reproduce isn't
279
+ trusted. Metrics are computed AFTER the run from immutable evidence (leakage-
280
+ separation), so tuning-to-the-metric is structurally impossible. Returns
281
+ `null` for thin records — never a fabricated number.
282
+ - **Resolver: committable file metadata + functionality pin.** The OKF resolver
283
+ now carries per-file metadata and pins functionality through resolution, so a
284
+ bundle's behavior is reproducible from its committed files.
285
+
286
+ ## 0.3.0
287
+
288
+ - **Agent risk config: coin deny-list (`blocklist`).** `risk.blocklist` lets an
289
+ agent name symbols it must never open, even if they are on the watchlist —
290
+ deny wins over allow. Enforced in the runner's decision validator (rejects
291
+ `futures_open` / `spot_order` on a denied symbol) and surfaced in the system
292
+ prompt, so the model is told the boundary and the runner re-checks it.
293
+ - **Docs: Open Knowledge Format positioning.** Clarified that a CoinRithm agent
294
+ is an OKF bundle — a portable directory of markdown + frontmatter that is
295
+ model-agnostic (run the same definition on any model). Develop and prove it
296
+ free on paper, then run it anywhere.
297
+ - npm keywords refreshed (`open-knowledge-format`, `okf`, `model-agnostic`,
298
+ `gemini`) for registry discovery.
299
+
300
+ ## 0.2.0
301
+
302
+ - Added the **`coinrithm-agent`** self-host runner binary alongside the MCP
303
+ server: a folder-as-architecture (OKF) agent you bring your own model key to,
304
+ with caps enforced by the runner (not the model), dry-run by default,
305
+ paper-only.
306
+
307
+ ## 0.1.x
308
+
309
+ - Initial `coinrithm-mcp` MCP server: reads, quotes, scoped spot/futures/PM
310
+ writes, ledger export, and Agent Arena integration over a user-minted API key.