Paste or drop
Copy the lines you want to read, or drop a log file. Raw FIX, prefixed log lines, and JSON-wrapped
messages are supported. Pipe, SOH, and ^A delimiters are detected automatically.
Paste one message, selected lines for a few orders, or a whole log. Read decoded fields and find the messages you need. Parsing happens locally in your browser.
Copy the lines you want to read, or drop a log file. Raw FIX, prefixed log lines, and JSON-wrapped
messages are supported. Pipe, SOH, and ^A delimiters are detected automatically.
Click Parse to extract the FIX messages into a table. You can work directly in Messages; there is no need to switch to Orders.
Select a row to see its raw FIX, tag names, decoded values, and repeating groups. Use the next row or j/k to move through the log.
Search for an order ID, symbol, or tag value. Clear the search to see all loaded messages again. Filtering changes the view, not the pasted input.
Partial logs are welcome. You do not need a complete session. Sequence gaps and absent reports may simply reflect lines you did not copy; they do not by themselves establish a session or order failure.
No log handy? Choose Explore sample logs in the viewer to try a small order lifecycle.
ORD-001Text anywhere in the message11=ORD-001Exact ClOrdID match35=8ExecutionReports@Symbol == "AAPL"Field-name query@Symbol == "AAPL" and @Side == @BuyCombined conditionsType @ for field autocomplete. Decoded aliases such as @MsgType == @ExecutionReport
work too. Use .* Regex when a regular expression is the clearest match.
A filter only searches messages already loaded. If an order's ID changes after a replacement, use Trace this order on a selected message to follow its linked IDs.
Stay in Messages and use Trace this order to focus on a selected order. Or choose Orders for a summary of each order's requests and reports. Both views use only the messages you loaded; they cannot recover omitted lines.
Tracing temporarily clears message filters to show the loaded chain across replacement IDs. Exit trace restores your previous filters.
These tools are available when useful. You do not need them to read your messages.
Pin important messages, compare two messages field by field, promote useful tags into columns, or drag across the activity timeline to isolate a time window.
Select a message to see its raw FIX, decoded tag names and enum values, repeating groups, and checksum/BodyLength validation.
In Orders, use Working, Partial, Filled, Canceled, No report in input, and Rejected filters. These describe the loaded messages, not an independently verified account state.
Findings highlight possible inconsistencies such as quantity mismatches or duplicate execution IDs. Select one to inspect the message. Missing reports or fills are informational, and sequence-gap notes describe only this input; check the surrounding log before drawing conclusions.
The CLI starts a localhost-only bridge and opens FIXtags connected to the stream. Nothing is sent to a remote backend.
npx fixtags fix.logRun without installingnpm install -g fixtagsInstall the fixtags commandnpx fixtags /var/log/fix.logFollow a filetail -f fix.log | npx fixtagsPipe any commandssh prod 'tail -f /var/log/fix.log' | npx fixtagsTail remotely over SSHA plain CLI run is temporary and ends with Ctrl-C. Name a session or stream when several terminals should feed one browser workspace or when a feed needs to survive terminal restarts.
fixtags --session cert --stream orders cert.logName the workspace and feedfixtags --stream orders -- kubectl logs pod-a -fLet FIXtags manage the commandfixtags lsList background sessionsfixtags streams lsList streams in the selected sessionfixtags --bg fix.logKeep a background session after the terminal exitsfixtags --newClear the selected session and start freshfixtags streams clear ordersRemove one stream's retained messagesfixtags streams stop ordersStop accepting that stream until its feeder is rerunfixtags sessions stopStop the selected background sessionfixtags urlPrint the selected session's browser URLfixtags configShow persisted CLI defaultsfixtags --helpShow every command, option, and example--localServe the app locally for Safari or offline use--echoMirror streamed lines to the terminal--decodeAnnotate FIX enum values in terminal output--history NSet how many lines a background session retains--idle-timeout MINChoose when an inactive background session exits--no-openPrint the URL without opening a browser--grep prints matching original log lines and exits without starting a server or writing session
state.
fixtags --grep '@Symbol == "AAPL"' fix.logQuery by decoded fieldfixtags --grep '35=8' -c fix.logCount ExecutionReportsFIXtags is easy for an LLM agent to drive. The machine-readable guide lives at
fixtags.dev/llms.txt: the exact share-URL spec with a
verifiable worked example, the query language, the headless CLI modes, and how to require()
core.js to parse FIX in Node.
The CLI has two headless, no-server modes an agent can pipe together. --grep --format emits
structured matches, and share mints a link — the log compressed into the URL fragment, never sent
to a server.
fixtags --grep '35=8' --format json fix.logMatched messages as JSON, tags decodedfixtags --grep '@OrdStatus == @Rejected' fix.log | fixtags shareLink only the rejectsA share link is utf8 → raw DEFLATE → base64url, appended as #z=<payload> with
optional &q=/&m=orders/&t=/&s= view state,
capped at 63000 encoded characters. Node's zlib.deflateRawSync and the browser's
DecompressionStream are byte-compatible, so a link the CLI mints opens exactly like one the Share
button makes.
There's also a ready-made, agent-agnostic skill — FIX-investigation recipes built on these modes — served at
fixtags.dev/skill.md. fixtags skill prints
it, so install it wherever your agent keeps skills:
fixtags skill > ~/.claude/skills/fixtags/SKILL.mdOr any other agent's skill directory