{"_id":"@astridarena/agent-tripwire","_rev":"6-c470fbd2cc6fa1bafa3a549cb34ee538","name":"@astridarena/agent-tripwire","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@astridarena/agent-tripwire","version":"1.0.0","_id":"@astridarena/agent-tripwire@1.0.0","maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"bin":{"tw":"dist/cli.js"},"dist":{"shasum":"343354216f735ae9f69fd0a72c8a243b313fa513","tarball":"https://registry.npmjs.org/@astridarena/agent-tripwire/-/agent-tripwire-1.0.0.tgz","fileCount":29,"integrity":"sha512-76VQI1Vtp1ZC3rnufVzVdpN3ETDTzypW4qMikHUIlQR22qiy8MGCjTkL15TuEfoQIJEnzGB8TlPuJS75a9SVXQ==","signatures":[{"sig":"MEUCIGD+l+9LKe697tV7BJfa6QloN2cce1WUJ2UuZuK1SDivAiEAiWsfTA3ba4HYudnyRk59oPflc8FlFrglF5EyoI0eq6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103912},"type":"module","gitHead":"9eee56bee8041dd56820262bd79aec9c32868251","private":false,"scripts":{"dev":"tsx src/cli.ts","build":"tsc","daemon":"tsx src/daemon.ts"},"_npmUser":{"name":"leocrowdform","email":"leo@crowdform.co.uk"},"_npmVersion":"10.9.2","description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-tripwire_1.0.0_1775817315404_0.8896546907658751","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@astridarena/agent-tripwire","version":"1.0.1","_id":"@astridarena/agent-tripwire@1.0.1","maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"bin":{"tw":"dist/cli.js","agent-tripwire":"dist/cli.js"},"dist":{"shasum":"a2faa37433462fc0e19e92ba9366438a1bb4af78","tarball":"https://registry.npmjs.org/@astridarena/agent-tripwire/-/agent-tripwire-1.0.1.tgz","fileCount":16,"integrity":"sha512-iNyxrIkbc9JH6CL4+va2otgTXpBqujt1l0klxhbA5KILARkX5gE4AibDJrg+x/TuVWsB6hWKQer90lloV8fBtw==","signatures":[{"sig":"MEUCIQCdDntO88qOAwTCJR45U58ukx+tr8UwcXw7/vob+d0ZngIgH+3NYA5a4nHapvYmrbcHuGBjCbLzSbGB5yU0mzirFgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49368},"type":"module","gitHead":"9eee56bee8041dd56820262bd79aec9c32868251","private":false,"scripts":{"dev":"tsx src/cli.ts","build":"tsc","daemon":"tsx src/daemon.ts","prepare":"tsc","prepublish":"npm run build"},"_npmUser":{"name":"leocrowdform","email":"leo@crowdform.co.uk"},"_npmVersion":"10.9.2","description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-tripwire_1.0.1_1775817783493_0.13912910418003155","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@astridarena/agent-tripwire","version":"1.0.2","_id":"@astridarena/agent-tripwire@1.0.2","maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"bin":{"tw":"dist/cli.js","agent-tripwire":"dist/cli.js"},"dist":{"shasum":"6c884fe1f00e252c6f692e0a96d3e229c91e4651","tarball":"https://registry.npmjs.org/@astridarena/agent-tripwire/-/agent-tripwire-1.0.2.tgz","fileCount":16,"integrity":"sha512-plAkFU7JGiw1pD5C02Id99j4TAKjZSLZaBIDTl6VkMkmuebDnbRjKTnIJe6fHCPWQz2VHseHNYe/XO8QhduE4Q==","signatures":[{"sig":"MEQCIHwdfKgwZ7kGNZtcPtUqPhtbJpPsRHW3EyHc2MjsvmK7AiBB48E3e25B67p+bJyBWKBCUNu0Yrs00x1anTDsZn2Qzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50735},"type":"module","gitHead":"9eee56bee8041dd56820262bd79aec9c32868251","private":false,"scripts":{"dev":"tsx src/cli.ts","build":"tsc","daemon":"tsx src/daemon.ts","prepare":"tsc","prepublish":"npm run build"},"_npmUser":{"name":"leocrowdform","email":"leo@crowdform.co.uk"},"_npmVersion":"10.9.2","description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-tripwire_1.0.2_1775818346256_0.2682822120847963","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@astridarena/agent-tripwire","version":"1.0.3","_id":"@astridarena/agent-tripwire@1.0.3","maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"bin":{"atw":"dist/cli.js","agent-tripwire":"dist/cli.js"},"dist":{"shasum":"dff6c76a454e4f88381f1cac2f40f6614de2f4cd","tarball":"https://registry.npmjs.org/@astridarena/agent-tripwire/-/agent-tripwire-1.0.3.tgz","fileCount":16,"integrity":"sha512-17NgFdHuEMDdCtrPw7ZQTZqx4ByqaQNbPISVsX8PGOnlLJnnRipQLXKs8UTwymcIk5h92gzmnlJkih6pZgQznQ==","signatures":[{"sig":"MEQCIAvt9s6M2bY3DYy+gsvMGdFquDZGBiE5V5Dz6cv56eOWAiBLyIxDU7AW0MP9+KzjPnZK5YETa1xtCX2/V5WO6gRAQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50737},"type":"module","gitHead":"672144873d1b2c075d4e81f11e22dd05663daa56","private":false,"scripts":{"dev":"tsx src/cli.ts","build":"tsc","daemon":"tsx src/daemon.ts","prepare":"tsc","prepublish":"npm run build"},"_npmUser":{"name":"leocrowdform","email":"leo@crowdform.co.uk"},"_npmVersion":"10.9.2","description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-tripwire_1.0.3_1775819232289_0.1679814378503186","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@astridarena/agent-tripwire","version":"1.0.4","_id":"@astridarena/agent-tripwire@1.0.4","maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"bin":{"atw":"dist/cli.js","agent-tripwire":"dist/cli.js"},"dist":{"shasum":"2c8bf4621baea8ba8fe51d1ca07ca8c213f3037c","tarball":"https://registry.npmjs.org/@astridarena/agent-tripwire/-/agent-tripwire-1.0.4.tgz","fileCount":16,"integrity":"sha512-59Rl6x9RpNn8FOVj7pBs9S+rT7v9d98nLr9xYzSdafZIicns8rThDpXHGVQU/wzoL2TLFE9xf2++XGoDUEW50Q==","signatures":[{"sig":"MEUCIEGX8W/gChREo4LjTe8P1AsGzcjv2cbQTaidsl5DWRU1AiEAh1Y/5PmiBWeP3O7PX38gSZEjpQyRISVUzzIR8oa/L+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54742},"type":"module","gitHead":"363591e12652667e9ded845ddd236892196b7236","private":false,"scripts":{"dev":"tsx src/cli.ts","build":"tsc","daemon":"tsx src/daemon.ts","prepare":"tsc","prepublish":"npm run build"},"_npmUser":{"name":"leocrowdform","email":"leo@crowdform.co.uk"},"_npmVersion":"10.9.2","description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"commander":"^12.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent-tripwire_1.0.4_1775822651620_0.9604870624411845","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@astridarena/agent-tripwire","version":"1.0.5","description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","type":"module","bin":{"atw":"dist/cli.js","agent-tripwire":"dist/cli.js"},"private":false,"publishConfig":{"access":"public"},"scripts":{"build":"tsc","prepare":"tsc","dev":"tsx src/cli.ts","daemon":"tsx src/daemon.ts","prepublish":"npm run build"},"dependencies":{"commander":"^12.0.0","ws":"^8.20.0"},"devDependencies":{"@types/node":"^20.0.0","@types/ws":"^8.18.1","tsx":"^4.0.0","typescript":"^5.0.0"},"_id":"@astridarena/agent-tripwire@1.0.5","gitHead":"c646fbc3bb3960aa1fe59479e6ec207db2bd8b4b","_nodeVersion":"23.10.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-wltL17yu72ctbX1aXmAwAhYJ0mA2zbqePKUX18IQwp798hOF0H1TkNxTdLb0iNPRoYT3u0V8lAy94/skj7OlSA==","shasum":"932abd20646e88328ad4adc698deb8c77106fc54","tarball":"https://registry.npmjs.org/@astridarena/agent-tripwire/-/agent-tripwire-1.0.5.tgz","fileCount":18,"unpackedSize":70192,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFsZKTcgLCalXMXRBMzfVF2+tNV4LqiGLmULJclheiq9AiEA9ENoYjqMrcJU7FCW9kDTt2xjq0o6TxfuOJWqAoF76wk="}]},"_npmUser":{"name":"leocrowdform","email":"leo@crowdform.co.uk"},"directories":{},"maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-tripwire_1.0.5_1776253795850_0.7659919529700596"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T10:35:15.338Z","modified":"2026-04-15T11:49:56.100Z","1.0.0":"2026-04-10T10:35:15.573Z","1.0.1":"2026-04-10T10:43:03.708Z","1.0.2":"2026-04-10T10:52:26.429Z","1.0.3":"2026-04-10T11:07:12.442Z","1.0.4":"2026-04-10T12:04:11.750Z","1.0.5":"2026-04-15T11:49:55.996Z"},"description":"Crypto market event system for AI agents. Set price conditions — when they trip, agents act.","maintainers":[{"name":"leocrowdform","email":"leo@crowdform.co.uk"}],"readme":"# agent-tripwire\n\nCrypto market event system for AI agents. Set price conditions on any asset — when they trip, your agent acts.\n\nBuilt as infrastructure for [Openclaw](https://openclaw.ai) and other AI agents that need to react to market conditions without polling or manual monitoring.\n\n```bash\n# Fire a shell command when BTC crosses $80k\natw event --asset BTC/USD --cross 80000 --trigger \"./scripts/notify.sh\"\n\n# Forward to your agent if ETH drops 5% in the last hour\natw event --asset ETH/USD --down 5% --time 1h \\\n  --agent \"ETH dropped 5% in the last hour. Assess impact on our position.\"\n\n# Download historical data for backtesting\natw history --asset BTC/USD --from 2025-01-01 --to 2025-04-01 --interval 1h\n```\n\nPowered by [Binance](https://binance.com) (live stream + history) with [Pyth Network](https://pyth.network) fallback for unlisted assets.\n\n---\n\n## Quick start with npx\n\nNo install needed for one-off use:\n\n```bash\n# Check a live price\nnpx @astridarena/agent-tripwire price --asset BTC/USD\n\n# Download historical data\nnpx @astridarena/agent-tripwire history --asset BTC/USD --from 2025-01-01 --to 2025-04-01 --interval 1h\n\n# Set a price alert (starts background daemon automatically)\nnpx @astridarena/agent-tripwire event --asset BTC/USD --cross 80000 --trigger \"echo BTC hit 80k\"\n\n# Fire when BTC moves up 0.001%\nnpx @astridarena/agent-tripwire event --asset BTC/USD --up 0.001% --trigger \"echo BTC up 0.001%\"\n```\n\nRunning `event` starts the daemon and prints a confirmation:\n\n```\nStarting agent-tripwire daemon...\n✓ Listener registered\n  ID:        4e73cf5d-25a9-422a-a99e-01200c270d59\n  Asset:     BTC/USD\n  Condition: cross 80000\n  Snapshot:  $71,801.25\n  Once:      true\n  Trigger:   echo BTC hit 80k\n```\n\n## Install\n\n**CLI only (npm)**\n\n```bash\nnpm install -g @astridarena/agent-tripwire\n```\n\nPuts `atw` and `agent-tripwire` on your PATH. Requires Node.js 18+.\n\n**CLI + Openclaw skill (clone)**\n\n```bash\ngit clone https://github.com/leomercier/agent-tripwire\ncd agent-tripwire\n./install.sh\n```\n\n**Openclaw skill only**\n\n```bash\nopenclaw skills install https://raw.githubusercontent.com/leomercier/agent-tripwire/refs/heads/main/SKILL.md\n```\n\nInstalls the skill directly into Openclaw without cloning the repo. Useful if you already have `atw` on your PATH.\n\n---\n\n## Commands\n\n### `atw event`\n\nRegister a price condition. A background daemon starts automatically and owns the Binance WebSocket stream (with Pyth fallback).\n\n```bash\natw event --asset <symbol> [--cross | --up | --down] [--time] [--trigger | --agent] [--once | --repeat]\n```\n\n**Conditions**\n\n| Flag              | Description                                                   |\n| ----------------- | ------------------------------------------------------------- |\n| `--cross <price>` | Fires when price crosses an absolute level (either direction) |\n| `--up <N%>`       | Fires when price rises ≥N% from snapshot                      |\n| `--down <N%>`     | Fires when price falls ≥N% from snapshot                      |\n\n**Time window** (`--up` / `--down` only)\n\n```bash\n--time 1m | 1h | 1d\n```\n\nSnapshot resets at the start of each window. Without `--time`, snapshot is fixed at registration.\n\n**Actions** (at least one required)\n\n| Flag               | Description                                        |\n| ------------------ | -------------------------------------------------- |\n| `--trigger <cmd>`  | Shell command executed on fire                     |\n| `--agent <prompt>` | Forwards prompt + market context to Openclaw agent |\n\n**Lifecycle**\n\n| Flag       | Default                                   |\n| ---------- | ----------------------------------------- |\n| `--once`   | Default for `--cross`                     |\n| `--repeat` | Default for `--up`/`--down` with `--time` |\n\n**Examples**\n\n```bash\n# BTC crosses $80k — notify once\natw event --asset BTC/USD --cross 80000 \\\n  --trigger \"notify-send 'BTC crossed 80k'\"\n\n# BTC crosses $80k — notify once\natw event --asset BTC/USD --cross 80000 \\\n  --trigger \"echo'BTC crossed 80k'\"\n\n# ETH down 10% in the last hour — keep watching, call agent\natw event --asset ETH/USD --down 10% --time 1h --repeat \\\n  --agent \"ETH dropped 10% in the last hour. Review our exposure.\"\n\n# SOL up 5% today — agent suggests action\natw event --asset SOL/USD --up 5% --time 1d \\\n  --agent \"SOL is up 5% today. Suggest position adjustments.\"\n\n# Both trigger and agent\natw event --asset BTC/USD --down 15% --time 1d \\\n  --trigger \"./scripts/hedge.sh\" \\\n  --agent \"BTC down 15% today. Assess impact and recommend hedges.\"\n```\n\n---\n\n### `atw price`\n\nGet the current price for an asset (via stream cache or REST fallback).\n\n```bash\natw price --asset BTC/USD\n# BTC/USD: $71,800 (stream)\n```\n\n---\n\n### `atw history`\n\nDownload historical OHLCV bars to CSV for backtesting or analysis.\n\n```bash\natw history --asset <symbol> --from <date> --to <date> [--interval <interval>] [--source <binance|pyth>] [--output <path>]\n```\n\n| Flag         | Description                                                          |\n| ------------ | -------------------------------------------------------------------- |\n| `--asset`    | Asset symbol, e.g. `BTC/USD`                                         |\n| `--from`     | Start date (`YYYY-MM-DD` or Unix seconds)                            |\n| `--to`       | End date (`YYYY-MM-DD` or Unix seconds)                              |\n| `--interval` | Bar size: `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `1d` (default: `1h`) |\n| `--source`   | Data source: `binance` or `pyth` (default: `binance`)                |\n| `--output`   | Output path (default: `./data/{asset}-{from}-{to}.csv`)              |\n\n```bash\natw history --asset BTC/USD --from 2025-01-01 --to 2025-04-01 --interval 1h\n# Downloading BTC/USD 1h bars from 2025-01-01 to 2025-04-01...\n# [██████████████████████████████] 100% | chunk 30/30\n# Saved 2160 bars to ./data/BTC-USD-2025-01-01-2025-04-01.csv\n\natw history --asset ETH/USD --from 2024-01-01 --to 2025-01-01 --interval 1d\n# → ./data/ETH-USD-2024-01-01-2025-01-01.csv\n```\n\n**Output format** (`./data/BTC-USD-2025-04-07-2025-04-09.csv`):\n\n```\ntimestamp,datetime,open,high,low,close,volume\n1743984000000,2025-04-07T00:00:00.000Z,78365.55057166,78455.33439503,77366.68268581,78267.62139362,0\n1743987600000,2025-04-07T01:00:00.000Z,78270.20134488,79290.66220108,78260.74,79098.10508419,0\n1743991200000,2025-04-07T02:00:00.000Z,79092.14258909,79173.40838859,78344.63898993,78396.31049731,0\n1743994800000,2025-04-07T03:00:00.000Z,78397.23521312,78458.58292085,77311.6434523,77665.60999999,0\n1743998400000,2025-04-07T04:00:00.000Z,77665.25,77922.7976885,76616.97757302,76933.10911444,0\n...\n```\n\n- `timestamp` — Unix ms (ready for pandas `pd.to_datetime(df['timestamp'], unit='ms')`)\n- `datetime` — ISO 8601 UTC\n- `open/high/low/close` — USD price\n- `volume` — real base-asset volume from Binance (0 when using Pyth fallback)\n\nData is saved to `./data/` (git-ignored) for local backtesting and analysis.\n\n---\n\n### `atw list`\n\nShow all active listeners.\n\n```bash\natw list\n\n# 2 active listener(s):\n#\n#   3f2a1b4c-...\n#     BTC/USD cross $80000\n#     snapshot: $79,500  last: $79,800\n#     trigger: notify-send 'BTC crossed 80k'\n#\n#   9d8e7c6b-...\n#     ETH/USD down 10% / 3600000ms window\n#     snapshot: $1,800  last: $1,764\n#     agent: ETH dropped 10%, review exposure\n```\n\n---\n\n### `atw kill`\n\nRemove a listener by ID or asset.\n\n```bash\natw kill 3f2a1b4c-...       # by ID\natw kill --asset BTC/USD    # all listeners for this asset\n```\n\nDaemon shuts down when the last listener is removed.\n\n---\n\n## Trigger env vars\n\nInjected into every `--trigger` shell command:\n\n| Var              | Value                    |\n| ---------------- | ------------------------ |\n| `TW_ASSET`       | e.g. `BTC/USD`           |\n| `TW_PRICE`       | Price at fire time       |\n| `TW_CONDITION`   | `cross`, `up`, or `down` |\n| `TW_PCT_CHANGE`  | % change (up/down only)  |\n| `TW_LISTENER_ID` | UUID of the listener     |\n| `TW_FIRED_AT`    | ISO 8601 timestamp       |\n\n```bash\n#!/bin/bash\n# Example trigger script\necho \"$TW_ASSET hit $TW_CONDITION at \\$$TW_PRICE on $TW_FIRED_AT\" >> ~/alerts.log\n```\n\n---\n\n## Openclaw integration\n\nTripwire uses a **dual delivery model** — alerts are queued for heartbeat (primary) and optionally sent via `openclaw agent` as a best-effort fallback.\n\n**Primary — queue for heartbeat:**\n\nEvery fired condition writes a JSONL record to `~/.tripwire/alerts.queue`. A heartbeat agent polls this file, surfaces unacknowledged alerts in the main session, and records their ids in `~/.tripwire/alerts.ack` to prevent repeats.\n\n**Fallback — immediate delivery via openclaw agent:**\n\nWhen `--agent` is set, the daemon sends a self-contained alert to Openclaw using explicit session or agent targeting:\n\n```bash\n# targets the session id if TW_SESSION_ID is set\nopenclaw agent --session-id \"$TW_SESSION_ID\" --message \"TRIPWIRE ALERT ...\" --deliver --local\n\n# otherwise falls back to the main agent\nopenclaw agent --agent main --message \"TRIPWIRE ALERT ...\" --deliver --local\n```\n\nSet a session target for immediate fallback delivery:\n\n```bash\nexport TW_SESSION_ID=<your-session-id>       # optional: explicit session routing\nexport TW_OPENCLAW_BIN=/usr/local/bin/openclaw  # optional: default is \"openclaw\"\n```\n\nSkills for agent-tripwire can be added to `~/.openclaw/workspace/skills/`.\n\n---\n\n## Supported assets\n\nUse `COIN/USD` format (e.g. `BTC/USD`) or just the ticker (e.g. `BTC`).\n\n| Asset      | Pyth symbol       | Binance symbol | Notes                          |\n| ---------- | ----------------- | -------------- | ------------------------------ |\n| BTC/USD    | Crypto.BTC/USD    | BTCUSDT        |                                |\n| ETH/USD    | Crypto.ETH/USD    | ETHUSDT        |                                |\n| SOL/USD    | Crypto.SOL/USD    | SOLUSDT        |                                |\n| AVAX/USD   | Crypto.AVAX/USD   | AVAXUSDT       |                                |\n| BNB/USD    | Crypto.BNB/USD    | BNBUSDT        |                                |\n| ADA/USD    | Crypto.ADA/USD    | ADAUSDT        |                                |\n| DOT/USD    | Crypto.DOT/USD    | DOTUSDT        |                                |\n| DOGE/USD   | Crypto.DOGE/USD   | DOGEUSDT       |                                |\n| XRP/USD    | Crypto.XRP/USD    | XRPUSDT        |                                |\n| MATIC/USD  | Crypto.MATIC/USD  | POLUSDT        | Rebranded to POL on Binance    |\n| LINK/USD   | Crypto.LINK/USD   | LINKUSDT       |                                |\n| UNI/USD    | Crypto.UNI/USD    | UNIUSDT        |                                |\n| NEAR/USD   | Crypto.NEAR/USD   | NEARUSDT       |                                |\n| AAVE/USD   | Crypto.AAVE/USD   | AAVEUSDT       |                                |\n| ATOM/USD   | Crypto.ATOM/USD   | ATOMUSDT       |                                |\n| LTC/USD    | Crypto.LTC/USD    | LTCUSDT        |                                |\n| FIL/USD    | Crypto.FIL/USD    | FILUSDT        |                                |\n| BCH/USD    | Crypto.BCH/USD    | BCHUSDT        |                                |\n| TAO/USD    | Crypto.TAO/USD    | TAOUSDT        |                                |\n| HYPE/USD   | Crypto.HYPE/USD   | —              | Pyth only (not listed on Binance) |\n\n---\n\n## Architecture\n\n```\natw event   ─┐\natw list    ─┤─→ Unix socket (~/.tripwire/tw.sock) ─→ daemon\natw kill    ─┘                                          │\natw history ──────────────────────────────────────────→ Binance REST klines (Pyth fallback for HYPE etc.)\n                                                       │\n                                               Binance WebSocket aggTrade (Pyth fallback for HYPE etc.)\n                                                       │\n                                               Condition evaluator (every tick)\n                                                       │\n                                    ┌──────────────────┼──────────────────┐\n                                --trigger         enqueue alert        --agent (fallback)\n                             shell command    ~/.tripwire/alerts.queue  openclaw agent\n                                                       │                 (explicit target)\n                                               heartbeat polls queue\n                                               surfaces alerts in\n                                               main session\n```\n\n- **Binance WebSocket** serves most assets; **Pyth SSE** handles unlisted assets (e.g. HYPE)\n- **Daemon auto-start** — spawned detached on first `atw event`, self-terminates when empty\n- **CLI is stateless** — connects to socket, gets response, exits\n- **Queue-based delivery** — alerts persist in `~/.tripwire/alerts.queue`; heartbeat surfaces them\n- **`./data/`** — local CSV store for backtesting (git-ignored)\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}