Skip to content

Commit e679be5

Browse files
committed
chore: doc
1 parent 7cf1fa5 commit e679be5

1 file changed

Lines changed: 10 additions & 41 deletions

File tree

README.md

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
# TxLoom
22

3-
Synthetic Transaction Studio — a self-hosted payments world simulator: a
4-
deterministic, seeded generation engine, agent-first authoring via an MCP
5-
server, four delivery sinks (files, Kafka, RabbitMQ, webhooks) with
6-
history-to-live streaming, a realism report, and a six-surface React studio.
3+
Synthetic Transaction Studio — a self-hosted payments world simulator.
4+
TxLoom simulates a world of consumer personas, a merchant population, and
5+
fraud actors running multi-step campaigns, then reads transactions off of
6+
that world as they happen. Every event carries ground truth (`is_fraud`,
7+
`typology`, `actor_id`, `campaign_step`) as a byproduct of the simulation
8+
itself. A deterministic, seeded generation engine delivers data through
9+
four sinks (files, Kafka, RabbitMQ, webhooks) with history-to-live
10+
streaming, a labeled imperfection layer (duplicates, late/out-of-order
11+
delivery, clock skew), a realism report, agent-first authoring via an MCP
12+
server, and a six-surface React studio.
713

814
## Quickstart
915

@@ -16,43 +22,6 @@ Open **http://localhost:3000**. See [`specs/001-synthetic-transaction-studio/qui
1622
for the full walkthrough (first dataset in three steps, optional demo
1723
brokers for streaming, and the contributor development setup).
1824

19-
## Why TxLoom, not a prompt-in/rows-out generator
20-
21-
Most synthetic-data tools in this space — ShadowTraffic and similar
22-
prompt-driven generators among them — start from "describe the data you
23-
want, get rows back." TxLoom starts somewhere different: it simulates a
24-
_world_ (consumer personas with income patterns and spend rhythms, a
25-
merchant population, fraud actors running multi-step campaigns) and reads
26-
transactions off of that world as they happen. The practical differences
27-
that follow from that:
28-
29-
- **Ground truth, not just rows.** Every event carries a real cause — a
30-
salaried consumer's monthly grocery run, a card-testing actor's third
31-
probe in a burst — and the answer key (`is_fraud`, `typology`, `actor_id`,
32-
`campaign_step`) is a byproduct of simulating that cause, not a label
33-
bolted on after the fact.
34-
- **A labeled imperfection layer.** Duplicate delivery, late arrival,
35-
out-of-order delivery, and clock skew corrupt _delivered_ copies only —
36-
the truth record stays immutable — and every corruption is enumerated in
37-
the answer key. You can test a pipeline's resilience to messy real-world
38-
delivery without hand-rolling the mess yourself.
39-
- **History-to-live continuity.** A run's live-streaming phase continues the
40-
exact same world (population, RNG stream) the history phase produced —
41-
no reset, no discontinuity between "the batch dataset" and "the live
42-
demo."
43-
- **Agent-first, not LLM-embedded.** No language model ships in the
44-
product. Point any MCP-capable agent you already have (Claude Code,
45-
Cursor, etc.) at the built-in agent-integration server and it authors a
46-
spec against the same validator the UI uses — the agent proposes, the
47-
deterministic engine enforces, and no model ever generates a transaction.
48-
- **Open source, self-hosted, no per-token cost.** Apache-2.0, one
49-
`docker compose up`, no hosted-only dependency for core functionality.
50-
51-
None of this is a claim that adjacent tools are worse at what _they're_
52-
built for — prompt-driven row generation is a different, valid tool for a
53-
different job. TxLoom's bet is that fraud/payments testing specifically
54-
needs a world with causes and consequences, not just plausible-looking rows.
55-
5625
## Performance
5726

5827
Streaming holds the configured TPS within tolerance and publishes

0 commit comments

Comments
 (0)