Document all CLI commands and options including: - fabric tui, web, tail/logs, replay, prune, digest, config - All options with defaults and descriptions - OTLP receiver configuration - Examples and common patterns - Environment variables and exit codes Resolves bd-6hm Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Bead-Id: bd-6hm
543 lines
12 KiB
Markdown
543 lines
12 KiB
Markdown
# FABRIC CLI Reference
|
|
|
|
Complete reference for all `fabric` commands and options.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install -g @needle/fabric
|
|
# or
|
|
pnpm add -g @needle/fabric
|
|
```
|
|
|
|
The binary installs as `fabric` (or `fabric-node` if there's a naming conflict).
|
|
|
|
## Commands Overview
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `fabric tui` | Launch terminal UI dashboard |
|
|
| `fabric web` | Launch web dashboard |
|
|
| `fabric tail` / `fabric logs` | Tail log file and display events |
|
|
| `fabric replay` | Replay worker session history |
|
|
| `fabric prune` | Prune old log files |
|
|
| `fabric digest` | Generate session digest from log file |
|
|
| `fabric config` | Manage FABRIC configuration |
|
|
|
|
---
|
|
|
|
## Global Options
|
|
|
|
```bash
|
|
fabric --help # Show help
|
|
fabric --version # Show version
|
|
```
|
|
|
|
---
|
|
|
|
## `fabric tui`
|
|
|
|
Launch the terminal UI dashboard with real-time worker activity.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
fabric tui [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Alias | Default | Description |
|
|
|--------|-------|---------|-------------|
|
|
| `-f, --file <path>` | — | — | Log file to tail (single-file mode) |
|
|
| `--source <path>` | — | `~/.needle/logs/` | Log source (file or directory) |
|
|
| `-w, --worker <id>` | — | — | Filter to specific worker ID |
|
|
| `-l, --level <level>` | — | — | Filter by log level (`debug`, `info`, `warn`, `error`) |
|
|
| `--otlp-grpc <addr>` | — | — | Enable OTLP/gRPC receiver (e.g. `:4317` or `0.0.0.0:4317`) |
|
|
| `--otlp-http <addr>` | — | — | Enable OTLP/HTTP receiver (e.g. `:4318` or `0.0.0.0:4318`) |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Basic TUI watching default log directory
|
|
fabric tui
|
|
|
|
# Watch a specific directory
|
|
fabric tui --source /var/log/needle/
|
|
|
|
# Filter to one worker
|
|
fabric tui --worker w-alpha
|
|
|
|
# Filter by log level
|
|
fabric tui --level error
|
|
|
|
# With OTLP live telemetry
|
|
fabric tui --otlp-grpc :4317
|
|
|
|
# Combine log file tailing with OTLP
|
|
fabric tui --source ~/.needle/logs/ --otlp-grpc 0.0.0.0:4317
|
|
```
|
|
|
|
### Keyboard Shortcuts
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| `q` | Quit |
|
|
| `Tab` | Switch panels |
|
|
| `j` / `k` | Scroll down/up |
|
|
| `/` | Search |
|
|
| `f` | Filter |
|
|
| `Ctrl+P` | Command palette |
|
|
|
|
---
|
|
|
|
## `fabric web`
|
|
|
|
Launch the web dashboard with real-time updates via WebSocket.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
fabric web [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Alias | Default | Description |
|
|
|--------|-------|---------|-------------|
|
|
| `-p, --port <number>` | — | `3000` | Port to listen on |
|
|
| `-f, --file <path>` | — | — | Log file to tail (single-file mode) |
|
|
| `--source <path>` | — | `~/.needle/logs/` | Log source (file or directory) |
|
|
| `-w, --worker <id>` | — | — | Filter to specific worker ID |
|
|
| `-l, --level <level>` | — | — | Filter by log level |
|
|
| `-a, --auth-token <token>` | — | `$FABRIC_AUTH_TOKEN` | Auth token for POST endpoints |
|
|
| `--otlp-grpc <addr>` | — | — | Enable OTLP/gRPC receiver |
|
|
| `--otlp-http <addr>` | — | — | Enable OTLP/HTTP receiver |
|
|
| `--max-events <number>` | — | — | Max events in store before liveness guard exits |
|
|
| `--heap-snapshots` | — | `true` in production | Enable automatic heap snapshot capture |
|
|
| `--snapshot-interval <minutes>` | — | `30` | Interval between heap snapshots |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Basic web server on default port
|
|
fabric web
|
|
|
|
# Custom port
|
|
fabric web --port 8080
|
|
|
|
# With auth token
|
|
FABRIC_AUTH_TOKEN=secret fabric web
|
|
fabric web --auth-token secret
|
|
|
|
# With OTLP/HTTP receiver
|
|
fabric web --otlp-http :4318
|
|
|
|
# With memory-bomb guard
|
|
fabric web --max-events 1000000
|
|
```
|
|
|
|
### Access
|
|
|
|
- Local: `http://localhost:3000`
|
|
- Remote (via Tailscale): `https://hetzner-ex44.tail1b1987.ts.net/`
|
|
|
|
### Authentication
|
|
|
|
POST endpoints (`/api/events`, `/api/events/batch`) require `Authorization: Bearer <token>` when an auth token is configured.
|
|
|
|
---
|
|
|
|
## `fabric tail` / `fabric logs`
|
|
|
|
Tail log file and display events. `logs` is an alias for `tail`.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
fabric tail [options]
|
|
fabric logs [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Alias | Default | Description |
|
|
|--------|-------|---------|-------------|
|
|
| `-f, --file <path>` | — | — | Log file to tail (single-file mode) |
|
|
| `--source <path>` | — | `~/.needle/logs/` | Log source (file or directory) |
|
|
| `-w, --worker <id>` | — | — | Filter by worker ID |
|
|
| `-t, --event-type <pattern>` | — | — | Filter by event type (glob, e.g. `bead.*`, `worker.started`) |
|
|
| `-l, --level <level>` | — | — | Filter by log level (deprecated: use `--event-type`) |
|
|
| `-n, --lines <number>` | — | `0` | Number of existing lines to show |
|
|
| `--no-follow` | — | — | Exit after reading existing lines |
|
|
| `--json` | — | — | Output raw JSON instead of formatted |
|
|
| `--otlp-grpc <addr>` | — | — | Enable OTLP/gRPC receiver |
|
|
| `--otlp-http <addr>` | — | — | Enable OTLP/HTTP receiver |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Stream events from default directory
|
|
fabric tail
|
|
|
|
# Show last 100 lines and follow
|
|
fabric tail -n 100
|
|
|
|
# Filter by worker
|
|
fabric tail --worker w-alpha
|
|
|
|
# Filter by event type
|
|
fabric tail --event-type "bead.*"
|
|
|
|
# Raw JSON output
|
|
fabric tail --json
|
|
|
|
# Exit after reading (no follow)
|
|
fabric tail --no-follow -n 50
|
|
|
|
# With OTLP
|
|
fabric tail --otlp-grpc :4317
|
|
```
|
|
|
|
---
|
|
|
|
## `fabric replay`
|
|
|
|
Replay worker session history chronologically with timeline scrubbing.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
fabric replay [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Alias | Default | Description |
|
|
|--------|-------|---------|-------------|
|
|
| `-f, --file <path>` | — | `~/.needle/logs/workers.log` | Log file to replay |
|
|
| `-w, --worker <id>` | — | — | Filter by worker ID |
|
|
| `-t, --event-type <pattern>` | — | — | Filter by event type (glob) |
|
|
| `-l, --level <level>` | — | — | Filter by log level (deprecated) |
|
|
| `-s, --speed <speed>` | — | `1` | Playback speed (`0.5`, `1`, `2`, `5`, `10`) |
|
|
| `--auto` | — | — | Start playback automatically |
|
|
|
|
### Playback Speeds
|
|
|
|
- `0.5` - Half speed
|
|
- `1` - Normal speed (default)
|
|
- `2` - 2x speed
|
|
- `5` - 5x speed
|
|
- `10` - 10x speed
|
|
|
|
### Keyboard Controls
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| `q` / `C-c` | Quit |
|
|
| `Escape` | Quit |
|
|
| `Space` | Play/Pause |
|
|
| `←` / `→` | Seek backward/forward |
|
|
| `Home` / `End` | Jump to start/end |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Replay default log file
|
|
fabric replay
|
|
|
|
# Replay specific file
|
|
fabric replay --file /path/to/session.jsonl
|
|
|
|
# Filter by worker
|
|
fabric replay --worker w-alpha
|
|
|
|
# 2x speed, auto-start
|
|
fabric replay --speed 2 --auto
|
|
```
|
|
|
|
---
|
|
|
|
## `fabric prune`
|
|
|
|
Prune old log files (archive + delete).
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
fabric prune [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Default | Description |
|
|
|--------|---------|-------------|
|
|
| `--source <path>` | `~/.needle/logs/` | Log directory to prune |
|
|
| `--archive-after <days>` | `3` | Archive files older than N days |
|
|
| `--archive-retain <days>` | `30` | Delete archives older than N days |
|
|
| `--max-age <days>` | `7` | Delete files older than N days regardless |
|
|
| `--dry-run` | — | Report what would happen without making changes |
|
|
|
|
### Archive Structure
|
|
|
|
Archives are created as `~/.needle/logs/archive/YYYY-MM-DD.tar.gz`.
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Dry run to see what would happen
|
|
fabric prune --dry-run
|
|
|
|
# Run with defaults
|
|
fabric prune
|
|
|
|
# Custom retention
|
|
fabric prune --archive-after 5 --max-age 14 --archive-retain 60
|
|
|
|
# Prune different directory
|
|
fabric prune --source /var/log/needle/
|
|
```
|
|
|
|
### Cron Setup
|
|
|
|
```bash
|
|
# Daily at 03:17
|
|
17 3 * * * ~/.local/bin/fabric prune
|
|
```
|
|
|
|
---
|
|
|
|
## `fabric digest`
|
|
|
|
Generate session digest from log file.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
fabric digest [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Alias | Default | Description |
|
|
|--------|-------|---------|-------------|
|
|
| `-f, --file <path>` | — | `~/.needle/logs/workers.log` | Log file to analyze |
|
|
| `-o, --output <path>` | — | — | Output file (default: stdout) |
|
|
| `-w, --worker <ids>` | — | — | Filter by worker IDs (comma-separated) |
|
|
| `--since <timestamp>` | — | — | Start time (Unix timestamp in ms) |
|
|
| `--until <timestamp>` | — | — | End time (Unix timestamp in ms) |
|
|
| `--max-files <number>` | — | `50` | Maximum files to list |
|
|
| `--max-errors <number>` | — | `20` | Maximum errors to list |
|
|
| `--no-cost` | — | — | Exclude cost information |
|
|
| `--no-errors` | — | — | Exclude error information |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Generate digest to stdout
|
|
fabric digest
|
|
|
|
# Save to file
|
|
fabric digest --output session-summary.md
|
|
|
|
# Filter by workers
|
|
fabric digest --worker w-alpha,w-bravo
|
|
|
|
# Time range
|
|
fabric digest --since 1709337600000 --until 1709424000000
|
|
|
|
# Exclude cost and errors
|
|
fabric digest --no-cost --no-errors
|
|
```
|
|
|
|
---
|
|
|
|
## `fabric config`
|
|
|
|
Manage FABRIC configuration (theme, presets, recent commands, filters).
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
# Show all config
|
|
fabric config
|
|
|
|
# Subcommands
|
|
fabric config theme [dark|light]
|
|
fabric config presets list
|
|
fabric config presets delete <name>
|
|
fabric config clear [options]
|
|
```
|
|
|
|
### `fabric config`
|
|
|
|
Show current configuration.
|
|
|
|
```bash
|
|
fabric config
|
|
```
|
|
|
|
Output includes:
|
|
- Theme setting
|
|
- Focus presets
|
|
- Recent commands
|
|
- Filter state
|
|
|
|
### `fabric config theme`
|
|
|
|
Show or set color theme.
|
|
|
|
```bash
|
|
# Show current theme
|
|
fabric config theme
|
|
|
|
# Set theme
|
|
fabric config theme dark
|
|
fabric config theme light
|
|
```
|
|
|
|
### `fabric config presets`
|
|
|
|
Manage focus presets.
|
|
|
|
```bash
|
|
# List all presets
|
|
fabric config presets list
|
|
fabric config presets ls
|
|
|
|
# Delete a preset
|
|
fabric config presets delete my-preset
|
|
fabric config presets rm my-preset
|
|
```
|
|
|
|
### `fabric config clear`
|
|
|
|
Clear configuration state.
|
|
|
|
```bash
|
|
# Clear all config
|
|
fabric config clear --all
|
|
|
|
# Clear specific categories
|
|
fabric config clear --theme
|
|
fabric config clear --presets
|
|
fabric config clear --commands
|
|
fabric config clear --filters
|
|
```
|
|
|
|
### Config File Locations
|
|
|
|
| Config | Path |
|
|
|--------|------|
|
|
| Theme | `~/.fabric/theme.json` |
|
|
| Presets | `~/.fabric/focus-presets.json` |
|
|
| Recent commands | `~/.fabric/recent-commands.json` |
|
|
| Filter state | `~/.fabric-filter-state.json` |
|
|
|
|
---
|
|
|
|
## OTLP Receivers
|
|
|
|
FABRIC can receive telemetry via OpenTelemetry Protocol (OTLP) from NEEDLE workers.
|
|
|
|
### `--otlp-grpc`
|
|
|
|
Enable OTLP/gRPC receiver.
|
|
|
|
```bash
|
|
fabric tui --otlp-grpc :4317
|
|
fabric web --otlp-grpc 0.0.0.0:4317
|
|
fabric tail --otlp-grpc :4317
|
|
```
|
|
|
|
| Format | Binds to |
|
|
|--------|----------|
|
|
| `:4317` | `0.0.0.0:4317` |
|
|
| `127.0.0.1:4317` | `127.0.0.1:4317` |
|
|
| `0.0.0.0:4317` | `0.0.0.0:4317` |
|
|
|
|
### `--otlp-http`
|
|
|
|
Enable OTLP/HTTP receiver.
|
|
|
|
```bash
|
|
fabric tui --otlp-http :4318
|
|
fabric web --otlp-http 0.0.0.0:4318
|
|
fabric tail --otlp-http :4318
|
|
```
|
|
|
|
### NEEDLE Configuration
|
|
|
|
Set environment variables before launching NEEDLE workers:
|
|
|
|
```bash
|
|
export OTEL_EXPORTER_OTLP_ENDPOINT=http://fabric-host:4317
|
|
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
|
|
needle run ...
|
|
```
|
|
|
|
---
|
|
|
|
## Common Patterns
|
|
|
|
### Multiple Sources
|
|
|
|
Combine log file tailing with OTLP live telemetry:
|
|
|
|
```bash
|
|
fabric tui --source ~/.needle/logs/ --otlp-grpc :4317
|
|
```
|
|
|
|
Events from both sources are merged and deduplicated.
|
|
|
|
### Filtering
|
|
|
|
Most commands support worker and level filtering:
|
|
|
|
```bash
|
|
fabric tui --worker w-alpha --level error
|
|
fabric tail --worker w-alpha --event-type "bead.*"
|
|
fabric replay --worker w-bravo
|
|
```
|
|
|
|
### Production Service
|
|
|
|
Run as a systemd service with OTLP/HTTP:
|
|
|
|
```bash
|
|
systemctl --user start fabric-web.service
|
|
```
|
|
|
|
Service file at `scripts/fabric-web.service` runs:
|
|
```bash
|
|
fabric web --port 3000 --source ~/.needle/logs/ --otlp-http :4318
|
|
```
|
|
|
|
---
|
|
|
|
## Exit Codes
|
|
|
|
| Code | Meaning |
|
|
|------|---------|
|
|
| `0` | Success |
|
|
| `1` | Error (invalid options, file not found, runtime error) |
|
|
|
|
---
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Purpose |
|
|
|----------|---------|
|
|
| `FABRIC_AUTH_TOKEN` | Auth token for POST endpoints (overrides `--auth-token`) |
|
|
| `NODE_ENV` | When `production`, enables heap snapshots by default |
|
|
| `WATCHDOG_USEC` | systemd watchdog timeout (enables watchdog ping) |
|
|
| `NOTIFY_SOCKET` | systemd notification socket (for watchdog) |
|
|
|
|
---
|
|
|
|
## See Also
|
|
|
|
- [Plan](plan.md) - Implementation roadmap
|
|
- [Schema](schema.md) - NeedleEvent wire format
|
|
- [Metrics](metrics.md) - Prometheus metrics export
|
|
- [README](../README.md) - Project overview
|