Shaduf.Research preview
Jev: Use Cases, Alternatives & Products/Jev trading bot and fraud gates
Use casesSeven projects read at pinned commits · spot-checked 05:21 UTC

Jev trading bot (TypeSafe AI): does a Jev failure still place the order?

Trading and fraud gates read in source. "jev trading bot" was a Google suggestion (client=firefox) for the words "jev trading" when the pool checked on . Bing and DuckDuckGo offered "jev trader". "jev fraud", "jev fraud detection" and "jev finance" got no relevant suggestion on any endpoint checked, so "fraud" is kept out of the main heading. A suggestion shows that people search for something; it does not show how many. This page reads seven public projects at pinned commits: four trading bots and three fraud or payment-approval gates. For each it shows the default mode, what switches it to real orders, and whether an order or payment still goes ahead when Jev errors, gives a bad or unsure answer, has no key, or is skipped. The pool ran none of them: no bot, no exchange or payment call, no Jev call.

Key finding

Of 4 Jev trading bots read in source, 2 can still place a new order when Jev errors; all 4 can trade without Jev. None of 3 fraud or payment gates moves money.

Documentedsource at pinned commits, checked

Picked from projects named in earlier pool research, two GitHub searches and this run's 24-hour scan; not a survey (how the seven were chosen). The counts describe these 7 projects at these commits only. None of the seven is confirmed as running with real money, and the page gives no trading advice.

What the seven projects add up to

One square per project: a filled square counts towards the number on the left

  • Q QuantDinger
  • A jev-trader
  • B Jev Trade
  • F btc-hft-jev
  • C jev-fraud-shield
  • D fraud-jev
  • E expense-policy gate

Four trading bots

  • Can place a new order on a Jev errorQuantDinger after an LLM fallback; btc-hft-jev through rules only. A and B send no new order but leave the resting order on the book2/4
    • Q yes
    • A no
    • B no
    • F yes
  • Has a path that trades without Jevexits and strategy types; mock model with a wallet key; rules-only path4/4
    • Q yes
    • A yes
    • B yes
    • F yes
  • Can place an order on a malformed answerQuantDinger after the LLM fallback; jev-trader as a buy2/4
    • Q yes
    • A yes
    • B no
    • F no
  • Can place an order with no Jev keywith Jev selected; 2/4 stop or go dry; 1/4 not recorded1/4
    • Q yes
    • A not recorded
    • B no
    • F no
  • Has no confidence thresholdbelow-threshold behaviour of the other 2 is in the table2/4
    • Q no
    • A yes
    • B yes
    • F no
  • Starts in mock, paper, testnet or virtual modereal orders need an explicit setting4/4
    • Q yes
    • A yes
    • B yes
    • F yes

Three fraud or payment-approval gates

  • Has a payment, authorisation or reimbursement call siteeach returns a dict, an HTTP JSON response or JSONL files0/3
    • C no
    • D no
    • E no
  • Reviews, steps up or aborts on a Jev error3/3
    • C yes
    • D yes
    • E yes
  • Has a malformed-answer path that approvesfraud-jev: a non-numeric noul becomes ALLOW1/3
    • C no
    • D yes
    • E no
  • Counts
  • Does not count
  • Not recorded in the code read
Counts from the project table below. Error, malformed-answer, below-threshold and no-key counts are kept apart and are not added together. Documented source at pinned commits, 4 Oct 2026.

Seven projects: does the failure reach the order or the payment?

Open a situation to highlight its column. Opening one closes the others. The last column says, for each situation, whether the failure still reaches an order or payment call site. Failure terms use the pool's shared vocabulary: fail-closed (stop, refuse or take the cautious outcome), fail-open (act anyway), fallback-<what> (a named substitute), advisory, no-decision; below a threshold: acts-anyway, held, no-threshold. Documented source at the commit shown, read 4 Oct 2026, 05:14–05:21 UTC

The Jev call failsHTTP error or timeout

2 of 4 bots can still place a new order. QuantDinger tries a configured LLM, then allows the order (error_allowed). btc-hft-jev reuses a judgment up to 60 s old, then falls back to rules only, which may quote. jev-trader and Jev Trade send no new order, but neither cancels the order already resting on the book. Timeouts: QuantDinger 8 s, Jev Trade 4,000 ms, btc-hft-jev 0.40 s; jev-trader sets none. All 3 gates take the cautious outcome: step-up, review with HTTP 500, or batch abort.

Malformed answerMissing or invalid fields

2 of 4 bots can still place an order: QuantDinger (LLM, then allow) and jev-trader, which turns any answer other than "sell" into a buy. Jev Trade cancels its resting quote. btc-hft-jev stops the run and cancels resting orders. Of the 3 gates, fraud-jev approves when noul is not a number (1/3); the other two step up or abort.

Below the thresholdLow confidence

QuantDinger: risk or execution confidence below 0.55 goes to the LLM, then the order is allowed; an insufficient answer never blocks. btc-hft-jev trades at half size below 0.50 and stands down when its quote environment is below 1.0. jev-trader and Jev Trade have no threshold (2/4). Gates: jev-fraud-shield steps up, the expense gate sends the claim to manual review, fraud-jev allows below its cuts.

No API keywith Jev selected

An order is still possible in 1 of 4 (QuantDinger: LLM if configured, else allow). Jev Trade refuses to start and btc-hft-jev switches to mock and dry run (2/4). For jev-trader this is not recorded (1/4): the key is read inside @ai-sdk/typesafe-ai, which was not read. Gates: jev-fraud-shield uses a local mock; fraud-jev returns HTTP 401; the expense gate refuses to run.

Ways around JevPaths that skip the Jev call

All 4 bots have a path that trades without Jev: QuantDinger's exits, grid, DCA and martingale strategies, its own credit denial, and the filter switched off; the mock model with a wallet key in jev-trader and Jev Trade; btc-hft-jev's rules-only path and cached judgments. Gates: jev-fraud-shield approves 0-flag and declines 3-or-more-flag transactions without Jev; fraud-jev sends OFAC destinations to review; the expense gate rejects on fixed rules and never approves without Jev.

Project (commit) and what Jev decidesDefault mode; what switches to real ordersJev error or timeoutMalformed answerBelow thresholdNo keyBypassFailure reaches the order or payment?
QuantDinger (a5a9f4c)Trading platform, optional entry gate. Five Choice questions; blocks only on a risk or execution "block" or a confident two-sided directional conflict. DetailFilter off; strategy orders go to a virtual account (signal). Real orders: execution_mode live plus exchange keysfallback-LLM, then fail-openTimeout 8 s. ai_decision_filter.py L194–238fallback-LLM, then fail-openL437–468fallback-LLM, then acts-anywayMin confidence 0.55 (operator setting) L285–293; insufficient never blocks L305–309fallback-LLM, then fail-openReason ai_not_configured L156–175trades without JevExits; grid, DCA, martingale; QuantDinger credit denial; filter off
  • Error: yes
  • Malformed: yes
  • Below threshold: yes
  • No key: yes
  • Bypass: yes
Each "yes" holds unless the LLM fallback rejects
jev-trader (b587759)Trading bot on Monad (Kuru). Jev picks the order side; the default model is a mockMODEL=mock (config.ts L31); dry run if PRIVATE_KEY is unset or DRY_RUN=true (L13). Real orders: Monad mainnet with PRIVATE_KEY; Jev needs MODEL=jevfail-closed for the new orderNo timeout set, maxRetries: 0 (model.ts L65; caught trader.ts L126). The resting order is not cancelledfail-openAny choice other than "sell" becomes a buy (trader.ts L105); a missing answer object is fail-closedno-thresholdNot applicable: probabilities are logged onlynot recordedThe key is read by @ai-sdk/typesafe-ai, not by repo codetrades without JevMock model with PRIVATE_KEY set sends real orders; the position cap flips the side (L108)
  • Error: no new order
  • Malformed: yes, as a buy
  • No threshold: yes
  • No key: not recorded
  • Bypass: yes
On an error the previous resting order stays on the book
Jev Trade (a3f2f83)Quoting desk on Hyperliquid. Mock model and testnet by defaultMODEL=mock; HL_TESTNET=true (config.ts L38); dry run without a wallet key (market.ts L53). Mainnet: HL_TESTNET=false + wallet key + MODEL=jev + Jev keyfail-closed for new ordersDeadline 4,000 ms (model.ts L314–324; trader.ts L93–101); a 402 pauses Jev for 30 s. The previous quote is not pulledfallback-holdCancels the resting quote (model.ts L285–287)no-thresholdNot applicable: no threshold in the code readfail-closedassertJevCredentials refuses to start (config.ts L24–36)trades without JevMock model with a wallet key places real orders on testnet, or on mainnet if switched
  • Error: no new order
  • Malformed: no (cancels)
  • No key: no
  • Bypass: yes
On an error the previous quote stays on the book
btc-hft-jev (96f3541)Quoting loop on Alpaca. Jev's judgment and confidence set whether and how much it quotes. New in this run's 24-hour scanPaper (Alpaca). Real orders need --live, JEV_LOOP_ALLOW_LIVE=i-understand-the-risk and a typed phrase (execution/alpaca.py L36–38, L92–109)fallback-last judgment, then fallback-rules-onlyJudgment up to 60 s old, then rules only, which can quote (fail-open). Cap 0.40 s (loop.py L524, L554–578; policy.py L95–107). A 403 gateway error switches to mock and dry run (fail-closed)fail-closedvalidate_answers raises; the run stops and resting orders are cancelled (battery.py L81–93; loop.py L753–767)acts-anyway at half size; heldConfidence < 0.50 trades at half size (ladder.py L50–59); quote environment < 1.0 stands downfallback-mockForced dry run, no orders (loop.py L274–278)trades without JevRules-only path; a cached judgment is reused between throttled calls
  • Error: yes, conditional (rules-only may quote)
  • Malformed: no
  • Below threshold: yes, half size
  • No key: no
  • Bypass: yes
jev-fraud-shield (eeb4fc6)Runnable fraud demo on synthetic card transactions: approve, step-up or declineMock when TYPESAFE_API_KEY is absent (jev_client.py L31); synthetic transactions; no payment modefail-closedSTEP_UP (decision_engine.py L49, L208–213); no timeout in code; 2 retriesfail-closedSTEP_UP (jev_client.py L92–95)heldSTEP_UP; author thresholds 0.7 / 1.3 (L53–56)fallback-mockLocal mock fed simulated signals (L105, L143–193)approves without Jev0 flags → APPROVE; 3 or more flags → DECLINE (decision_engine.py L200–205)
  • No payment call site
Returns a dict; demo.py prints it
fraud-jev (aa33b97)Runnable Next.js demo: ALLOW or REVIEW for fictional paymentsDemo; the key is pasted in the UI; fictional paymentsfail-closedREVIEW + HTTP 500 (route.ts L119–129); maxDuration 60 sconditional (counted fail-open: it can act)Missing object → REVIEW (fail-closed); non-numeric noul → ALLOW (fail-open) (fraud.ts L22–38)acts-anywayALLOW below the 0.65 / 0.75 / 0.85 cuts (fraud.ts L23–38)fail-closedHTTP 401 (route.ts L20–26)reviews without JevOFAC destination → REVIEW (fraud.ts L31)
  • No payment call site
JSON to the UI
Expense-policy gate (161c33b)Expense approval gate: approve or manual review after fixed checks. New in this run's 24-hour scanJev by default (config/expense-policy.json L5; cli.py L44); replay optional; no reimbursement stepfail-closedThe batch aborts before outputs; 30 s, no retries (jev_client.py L144; pipeline.py L40–58)fail-closedThe batch aborts (jev_client.py L222–248)heldmanual_review; thresholds in config/expense-policy.json L24–31fail-closedcli.py L46–49rejects without JevFixed rejects (currency, amount, receipt, duplicate, dates) skip Jev; no approval without Jev
  • No payment call site
Writes a JSONL decisions file
  • fail-closed or held (a person or the host's own prompt decides)
  • fail-open or acts-anyway; a "conditional" cell that can act is counted fail-open
  • fallback-<what> (named in the cell)
  • not recorded, not applicable or no-threshold (the cell says which)

Colours follow the shared legend on when Jev fails (changed ; this page used its own colours before). A fallback that can still place the order is blue with "then fail-open" in the cell. Bypass cells: red means the order or payment goes ahead without Jev; green means it is held, reviewed or rejected.

Last column: yes the failure still reaches an order call site; no it does not; conditional it can, depending on a fallback; not recorded. Line numbers refer to the file at the pinned commit (paths in sources). How to test these branches without a key is on testing without a key; status codes and retries are on errors and rate limits; how to choose a threshold is on confidence thresholds. To compare these rows with other use cases, see when Jev fails. One row per project is on the products ledger.

QuantDinger: where the gate sits before the order

QuantDinger is a trading platform with an optional Jev entry gate in backend_api_python/app/services/ai_decision_filter.py. The pool read it in the 28 Sep audit from moving main links. The file has since been rewritten: it is 743 lines at a5a9f4c, while the 28 Sep links pointed at lines up to L2279. Those earlier line links are stale. This page uses the a5a9f4c pins. The behaviour summarised on 28 Sep is confirmed at this commit. Documented read by the runner, 4 Oct 2026, 05:17–05:20 UTC

Three order call sites, each traced

The gate (AIDecisionFilter.evaluate()) is called at three places, each before the order is created. An allowed=False result stops the order at all three. An allowed=True result, including every failure path in the table, leads straight to order creation.

  1. Strategy v2 orders (strategy_v2/live_execution.py L233–273). The gate runs only when execution_mode is live and the strategy has ai_decision_filter set. A rejection sets the intent to ai_rejected and returns before INSERT INTO pending_orders (L308). The pending-order worker then sends these rows "through exchange and broker clients" (pending_order_worker.py L1–6).
  2. Quick trade (routes/quick_trade.py L564–567, calling quick_trade_ai.py L14–68). The rejection returns before place_order_from_signal or client.place_limit_order (L575–595). Opt-in per request.
  3. Alpaca route (routes/alpaca.py L453–479). Returns before place_limit_order or place_market_order (L492, L497). Opt-in per request. Alpaca is paper when the key starts with PK (L51, L72–75).

The 28 Sep claim that "rejected entries never reach the exchange" came from the README. It is now traced in source.

What the gate checks and what it lets through

  • Off by defaultThe filter runs only if the strategy or request sets ai_decision_filter (trading_executor.py L1723; quick_trade_ai.py L19). Strategy orders default to execution_mode "signal" (L1763), which fills "the isolated virtual account".
  • Five questions, three ways to blockChoices on data_quality, signal_alignment, market_regime, risk_check and execution_quality (L24–92). Only a risk "block", an execution "block", or both a signal conflict and an adverse regime at or above the minimum confidence reject the order (L299–309).
  • Unsure answers do not blockAn insufficient answer on any check does not block, and data_quality is never read by the allow expression (L305–309). Minimum confidence defaults to 0.55 and is an operator setting (L285, L517).
  • Errors end in "allow"On an exception the log says "Jev decision failed open" (L194–204); a configured LLM is tried (L206–223); if there is none, the order is allowed as error_allowed (L225–238). Timeout JEV_TIMEOUT_SECONDS: default 8 s, clamped to 1–30 s (L250, L516).
  • Paths that skip JevExits (actions outside ENTRY_ACTIONS, L141–146); grid, DCA, martingale and layered martingale strategies (L147–150); QuantDinger's own credit check failing, which allows the order with no Jev call (L177–191).
  • Audit does not blockEach decision is written to qd_ai_decisions. If the write fails, the log says "AI decision audit persistence skipped" and the order is not blocked (L622–700). No per-order human step was found.

What it sends to Jev: symbol, action, market and order type, quantity, reference price, notional, leverage, strategy type, signal reason and the strategy's context dict (L394–410), with no truncation in code. The repository has 17 tests for the gate, all mocked (tests/test_ai_decision_filter.py), including malformed answer → LLM and credit denial → order not blocked.

Not traced: the pending-order worker upgrades a queued signal row to live when the strategy is configured that way (pending_order_worker.py L1413–1420), while the strategy-path gate only runs for live requests. This may be another way past the gate. It was not followed end to end.

Fraud and payment-approval gates: real Jev calls, no money moved

All 3 gates have a real Jev call path. None of the 3 has a payment, authorisation or reimbursement call site, so for every situation in the table the answer to "does the failure reach the payment?" is no. Documented 4 Oct 2026

  • jev-fraud-shield (eeb4fc6)Runnable demo on synthetic card transactions. Rules approve a transaction with 0 flags and decline one with 3 or more without asking Jev. A Jev error, a malformed answer or a below-threshold answer all lead to STEP_UP. Without a key it uses a local mock. The result is a dict that demo.py prints.
  • fraud-jev (aa33b97)Runnable Next.js demo with fictional payments; the key is pasted in the UI. A Jev error returns REVIEW with HTTP 500; no key returns HTTP 401. A non-numeric noul returns ALLOW, and scores below the 0.65 / 0.75 / 0.85 cuts are allowed. OFAC destinations go to REVIEW without Jev. The answer is JSON to the UI.
  • Expense-policy gate (161c33b)Expense approval with Jev by default. Fixed rules reject on currency, amount, receipt, duplicates and dates without Jev; nothing is approved without Jev. A Jev error or a malformed answer aborts the batch; a below-threshold answer goes to manual_review. Output is a JSONL decisions file; there is no reimbursement step.

Before you point a Jev trading bot at real money

  • All 4 bots start in mock, paper, testnet or virtual mode (QuantDinger: filter off and a virtual account; jev-trader: mock; Jev Trade: mock and testnet; btc-hft-jev: paper). Each needs an explicit setting to send real orders (see the table). Documented
  • In jev-trader and Jev Trade, "mock" means no Jev, not no trading. The mock model still sends real orders when a wallet key is set: on Monad mainnet in jev-trader, and on testnet (or mainnet if switched) in Jev Trade. Documented
  • jev-trader turns any answer other than "sell" into a buy. Documented trader.ts L105
  • On a Jev error, jev-trader and Jev Trade place no new order, but the resting order stays on the book. Neither cancels it. Documented
  • A valid typed answer is not a safe trade. In QuantDinger, insufficient answers on all five checks still allow the order; only a "block" or a two-sided directional conflict rejects it. Documented ai_decision_filter.py L305–309
  • Claims of real fills or returns are the creators' own. Jev Trade's creator (aowang-ai) claims fills on Hyperliquid from five wallets Reported recorded by the pool 25 Sep 2026; the public desk showed "Offline" with blank positions when checked on 26 and 27 Sep. A survey gist by drillan says "Dry-run/paper-by-default is the norm — real orders require explicitly configured keys" Reported drillan, 20 Sep 2026. The pool states no performance figure and gives no trading or investment advice.
  • Order and account data leave your system. Read what data leaves your system before sending financial or personal data to Jev.

What is sent to Jev, and what is logged

  • Sent: order fields and the strategy context (QuantDinger); market data (jev-trader); market data plus the open position, including liquidation price and unrealised profit and loss (Jev Trade, btc-hft-jev); cardholder free text cut to 200 characters (jev-fraud-shield); payer and beneficiary names and account data, fictional in the demo (fraud-jev); full receipt text (expense gate). See the data checklist.
  • Logged: a failed audit write in QuantDinger does not block the order; jev-trader writes its log after the order is sent; a log failure in btc-hft-jev stops the later ticks, not the order already sent.
  • People and stop switches: none of the 7 has a per-order human approval step in the code read. btc-hft-jev has a dashboard pause and stops at a 5% drawdown.

How the seven were chosen and read

Picked from projects named in earlier pool research, two GitHub searches and this run's 24-hour scan; not a survey. In detail: the two trading and two fraud repositories named in the pool's 28 Sep audience findings, QuantDinger from the 28 Sep audit, two GitHub repository searches at ("jev fraud": 15 results; "jev payment": 10 results), and two projects created in the 24 hours before this run and found in its scan (btc-hft-jev and the expense-policy gate). A search count is a count of indexed repositories, not of users. TradeRank, named earlier, was not found in the searches or in two Jev project lists (cobanov/awesome-jev @72ee9f4, everyinfra/jev-radar @41c2547).

Each project was pinned to one commit and read through raw files at that commit. The runner read QuantDinger (05:17–05:20 UTC). A helper agent read the other six (05:14–05:21 UTC); the runner spot-checked 9 lines in 5 of those repositories at the same commits at 05:21:48 UTC, and all matched. No account, key, exchange, broker, wallet, testnet or payment-provider call was made; no bot was run in any mode; nothing was installed. Nothing on this page is Tested.

What was not verified

  • Any real order, fill, return or payment by any of the seven, and whether any copy of them runs with real money.
  • jev-trader's no-key path: the key is read inside @ai-sdk/typesafe-ai, which was not read.
  • QuantDinger's signal to live upgrade in the pending-order worker as a way past the gate (possible, not traced end to end).
  • How QuantDinger's LLM fallback decides: its prompt was not read beyond the call.
  • The contents of the expense gate's tests.
  • The six projects read by the helper agent were spot-checked (9 lines), not re-read line by line.
  • TradeRank (not found). Not read: caiovicentino/jev-risk-check-provider (pre-payment verdicts; the next payment candidate), Jono717/jev-trader, gilesknap/jev-trader, buberlo/jev-trader. Read lightly: ndolinschi/cartshield (a real Jev call, heuristics without a key, no payment call).

Sources and check times (4 Oct 2026, UTC)

  • R7-S50–S57: QuantDinger at a5a9f4c (commit 1 Oct 17:52; Apache-2.0), read 05:17–05:20, under backend_api_python/: app/services/ai_decision_filter.py L21–22, L24–92, L139–309, L394–410, L437–468, L516–517, L622–700; app/services/strategy_v2/live_execution.py L233–273, L308; app/routes/quick_trade.py L19–20, L564–595; app/routes/quick_trade_ai.py L14–68; app/routes/alpaca.py L51, L72–75, L453–497; app/services/trading_executor.py L1723, L1763; app/services/pending_order_worker.py L1–6, L1413–1420; tests/test_ai_decision_filter.py.
  • R7-S58: jev-trader at b587759 (commit 17 Sep; MIT): src/config.ts L13, L31; src/model.ts L65; src/trader.ts L105, L108, L126; src/market.ts, src/server.ts.
  • R7-S59: Jev Trade at a3f2f83 (commit 21 Sep; licence NOASSERTION): src/config.ts L24–38; src/model.ts L285–287, L314–324; src/trader.ts L93–101; src/market.ts L53; src/plan.ts, src/index.ts, src/sleeves.ts, src/server.ts.
  • R7-S60: btc-hft-jev at 96f3541 (commit 3 Oct 21:45; no licence): jevloop/loop.py L274–278, L524, L554–578, L753–767; jevloop/policy.py L95–107; jevloop/battery.py L81–93; jevloop/ladder.py L50–59; execution/alpaca.py L36–38, L92–109.
  • R7-S61: jev-fraud-shield at eeb4fc6 (commit 26 Sep; MIT): jev_client.py L31, L92–95, L105, L143–193; decision_engine.py L49, L53–56, L200–213; demo.py.
  • R7-S62: fraud-jev at aa33b97 (commit 17 Sep; no licence): src/lib/fraud.ts L22–38; src/app/api/analyze/jev/route.ts L20–26, L119–129.
  • R7-S63: Expense-policy gate at 161c33b (commit 3 Oct 07:23; MIT): config/expense-policy.json L5, L24–31; src/jev_expense_gate/cli.py L44–49; src/jev_expense_gate/jev_client.py L144, L222–248; src/jev_expense_gate/pipeline.py L40–58.
  • All seven read 05:14–05:21; helper-read rows spot-checked at 05:21:48.
  • R7-S64: GitHub repository searches "jev fraud" (15 results) and "jev payment" (10 results), 05:15:49.
  • R7-S65: drillan survey gist (gist, 20 Sep 2026), Reported.
  • R7-S66: ndolinschi/cartshield @59013c3 src/lib/jev.ts (read lightly); cobanov/awesome-jev @72ee9f4 and everyinfra/jev-radar @41c2547 READMEs (no TradeRank).
  • R7-S11: query wording, 05:21:29. Google suggest for "jev trading" offered "jev trading bot"; Bing (api.bing.com/osjson.aspx) and DuckDuckGo (duckduckgo.com/ac) offered "jev trader"; YouTube offered "jev trading" and nothing else. "jev fraud", "jev fraud detection" and "jev finance" gave no relevant suggestion on any endpoint.
  • Jev Trade creator claim and desk status: pool checks of 25, 26 and 27 Sep 2026 (carried, not rechecked).

Search published pools, pages, reports, and evidence.