# tail-fin-cli

Unified CLI entry point for [tail-fin](https://github.com/motosan-dev/tail-fin) — multi-site browser automation.

## Install

```sh
# All adapters (default)
cargo install --path .

# Only specific adapters
cargo install --path . --no-default-features --features twitter,reddit
```

Available features: `twitter`, `reddit`, `bloomberg`, `coupang`, `pcc`, `instagram`, `xhs`, `youtube`, `grok`, `sa`, `s591`, `gen`, `nansen`, `spotify`, `tradingview`

## Usage

```sh
# Sites that auto-launch a stealth browser
tail-fin coupang search "耳機" --limit 5
tail-fin pcc search "電腦"

# Sites that need your login session
tail-fin --connect 127.0.0.1:9222 twitter timeline
tail-fin --connect 127.0.0.1:9222 reddit hot --limit 10

# RSS (no browser needed)
tail-fin bloomberg markets --limit 5

# TradingView — no browser needed, uses WebSocket + HTTPS
tail-fin tradingview history BINANCE:BTCUSDT --resolution D --count 300
tail-fin tradingview quote NASDAQ:AAPL
tail-fin tradingview screener us-large-caps --limit 50

# Spotify (cookie-authenticated)
tail-fin --cookies spotify search "taylor swift"
```

## Global Flags

| Flag | Description |
|------|-------------|
| `--connect <host:port>` | Chrome remote debugging address |
| `--cookies [path]` | Use saved cookies |
| `--headed` | Run browser in visible mode |

All commands output JSON to stdout, errors to stderr.

## Interactive REPL

Run `tail-fin` without a subcommand (or pass the top-level `--repl` flag) to start an interactive session:

```sh
$ tail-fin --connect 127.0.0.1:9222
tail-fin> sa quote AAPL
{...}
tail-fin> twitter timeline --count 5
{...}
tail-fin> quit
```

Global flags (`--connect`, `--cookies`, `--headed`) are captured at launch and apply to every command in the session; they cannot be changed inside the REPL (restart to switch). Unknown commands and parse errors keep the session alive — only `quit`, `exit`, or `Ctrl+D` end it. Piped input (`echo "sa quote AAPL" | tail-fin`) runs commands silently, useful for scripted sequences.

**Note:** arguments are split on whitespace inside the REPL; commands with quoted args (e.g. `twitter search "rust lang"`) should be run in one-shot mode.

## License

[MIT](../../LICENSE)
