Skip to main content
The agent journal is a complete, plain-English record of everything your agent does and everything it chooses not to do. Every trade it places, every signal it passes on, every risk rule that fires, and every lifecycle change — promotion, demotion, or x402 data purchase — appears here as a timestamped entry written in natural language. The journal is first-class navigation in Halyrd, not a buried log. If you want to understand whether your strategy is working, the journal is where you look.

How the journal works

The journal feeds in reverse-chronological order: the most recent entry is always at the top. New entries arrive over WebSocket as they happen — you do not need to refresh the page to see your agent’s latest decision. Each entry carries a tag chip that categorizes the event at a glance, followed by a plain-English body that explains exactly what happened and why. The journal never stops running. Even when your agent is demoted and live trading is locked, it continues paper-trading and logging every decision. This means the journal always reflects what the agent would be doing — a continuous stream of reasoning you can read to judge whether the strategy’s edge is holding up during a lockout period.

Entry types

Each journal entry is tagged with one of the following chips:

EXECUTED

A trade was placed. The entry records the pair, side (BUY or SELL), size, fill price, and — once the position is closed — the realized PnL and fees. Example: “Bought CAKE/USDT: 90% of equity at 2.4103. Expected reversion to 24h mean of 2.4851.” Every executed trade links directly to its row in the trade history table. Click the trade row in /trades to jump to this journal entry, or click the journal entry’s trade reference to jump the other way.

SKIPPED

A potential trade was not placed. The entry always states the exact reason. There are four sources of skip decisions:
Skip sourceWhat it meansExample
Fee filterThe expected edge was too small relative to the cost of the trade”Skipped CAKE entry: expected edge 0.4% < 3× cost 0.6%“
Risk vetoPlacing the trade would breach an active risk rule”Skipped ETH entry: would breach daily drawdown limit (7.9% used of 8.0% allowed)“
Market conditions filterThe regime is unfavorable for the strategy”Skipped LINK entry: stand aside — funding rate 3.1% signals strong directional trend; mean reversion loses edge in this regime”
Quote rejectedThe verified price quote failed validation before the trade could be evaluated”Skipped CAKE entry: quote rejected — verified price deviated too far from mid-market”
A run of SKIPPED entries with the fee filter reason is one of the most useful signals you can see. It means your agent is finding trades but their expected edge is smaller than the cost to execute them — a common sign that your account size needs to grow before the strategy becomes cost-effective at your current position sizing.

RISK

A risk rule fired or a demotion event occurred. The entry names the specific rule that triggered — for example, the daily drawdown limit or the consecutive-loss circuit breaker — and describes what the agent did in response (stood aside, paused new entries, or demoted itself to paper). Example: “Daily drawdown limit reached (8.1% of 8.0% allowed). Live trading locked until next UTC day. Continuing paper-trade practice during lockout.”

PROMOTION

Your agent transitioned from paper to live. The entry records the timestamp and — once the first live transaction is signed — the BSC transaction hash linked to the block explorer. This marker also appears on the equity curve on the main dashboard. Example: “Agent promoted to live. First signed swap: 0x3f4a…d91c (BSCScan ↗)“

DEMOTION

Your agent returned from live to paper, either because of a risk breach or a manual action. The entry names the rule that fired (for automatic demotions) or records that the demotion was user-initiated. For daily drawdown demotions, the entry notes when live trading will resume. Example: “Demoted to paper: max drawdown limit reached (20.3% of 20.0% allowed). Live trading paused until you review paper results and manually re-approve promotion.”

X402

Your agent purchased gated market data using the x402 micropayment protocol. The entry records what data was purchased, how much was paid, and what the agent used the data for in its next cycle. Example: “Paid $0.001 for funding-rate snapshot via x402. Funding rate: 2.8% — within normal range; no stand-aside triggered.”

Linking journal entries to trades

Every EXECUTED journal entry and its corresponding trade history row are linked to each other. On the /trades screen, expand any row to find a direct link to the journal entry that explains the reasoning behind that trade. On the /journal screen, every EXECUTED entry includes a reference to the trade record with its final PnL once the position closes. This two-way link means you can always answer the question: “Why did the agent take this trade?” — and equally, “What did the journal say about this PnL outcome?”

Reading the journal as a strategy health check

The journal is more than a record — it is your primary tool for evaluating whether your strategy’s edge is intact in live market conditions. Here is what different patterns of entries mean:
PatternWhat it suggests
Regular mix of EXECUTED and SKIPPED (fee filter)Normal operation; the fee filter is working as designed
Long runs of SKIPPED (market conditions)The agent is standing aside during a trend; review whether your regime filter thresholds are calibrated to your market
Frequent SKIPPED (fee filter) with few EXECUTEDAccount size may be too small for the current cost structure; each trade’s fixed gas cost is eating the edge
RISK entries with consecutive-loss ruleThe agent triggered the streak circuit-breaker; check market conditions before it resumes
SKIPPED (risk veto) entriesThe agent is approaching a drawdown limit; no action required — the system is working correctly
Repeated SKIPPED (quote rejected) entriesThe market is producing unreliable quotes — abnormal spread, stale blocks, or low liquidity; the agent is protecting you from bad fills